Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/206.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 更新声级会冻结我的应用程序(我正在使用handler.post)_Java_Android_Mediarecorder_Android Mediarecorder - Fatal编程技术网

Java 更新声级会冻结我的应用程序(我正在使用handler.post)

Java 更新声级会冻结我的应用程序(我正在使用handler.post),java,android,mediarecorder,android-mediarecorder,Java,Android,Mediarecorder,Android Mediarecorder,首先是一个小的介绍。我需要做一个应用程序,记录声音在一个高水平的准确性。要求我制作一个每毫秒记录10个或更多样本的应用程序 编辑:处理程序的初始化 public class MyApp extends AppCompatActivity { <Initialize everything> Handler handler= new Handler(); } handler是如何初始化的?编辑了我的原始帖子以回答我的处理程序是如何初始化的我假设你的意思是stopreco

首先是一个小的介绍。我需要做一个应用程序,记录声音在一个高水平的准确性。要求我制作一个每毫秒记录10个或更多样本的应用程序

编辑:处理程序的初始化

public class MyApp extends AppCompatActivity {
    <Initialize everything>
    Handler handler= new Handler();
}

handler
是如何初始化的?编辑了我的原始帖子以回答我的处理程序是如何初始化的我假设你的意思是
stoprecording
处理程序没有执行,即使你可以点击按钮。你到底是怎么确定的?请添加与
stoprecording
@RubenDefour相关的所有代码默认情况下
处理程序
绑定到正在创建它的线程的线程/消息队列,此实例是主/UI线程吗。看起来你的Runnable正在阻塞UI线程,导致应用程序冻结。有没有办法通过检查按钮是否按下来打破“循环”?或者是否有
处理程序
的替代方案。奇怪的是,如果我将
Handler
更改为
Handler.postdelayed(这个,1)
,我就可以停止录制了。我现在将添加停止录制的代码。
handler
是如何初始化的?编辑了我的原始帖子以回答我的处理程序是如何初始化的。我假设你的意思是
stoprecording
处理程序没有执行,即使你可以点击按钮。你到底是怎么确定的?请添加与
stoprecording
@RubenDefour相关的所有代码默认情况下
处理程序
绑定到正在创建它的线程的线程/消息队列,此实例是主/UI线程吗。看起来你的Runnable正在阻塞UI线程,导致应用程序冻结。有没有办法通过检查按钮是否按下来打破“循环”?或者是否有
处理程序
的替代方案。奇怪的是,如果我将
Handler
更改为
Handler.postdelayed(这个,1)
,我就可以停止录制了。我现在将添加停止录制的代码。
buttonStart.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) 
    {    
        <intitializing sound stuff>

        handler.post(updateSoundLevel);
    }
});
@Override
protected void onCreate(Bundle savedInstanceState) {
    <Initialize buttons and some variables>
    final Runnable updateSoundLevel = new Runnable() {
        @Override
        public void run() {
            if (SoundRecording==true)
            {
                handler.post(this);
                    <here is measure the time and amplitude>   
            }
        }
    };
};
buttonStop.setOnClickListener(new View.OnClickListener()
{
    @Override
    public void onClick(View view)
    {
        //Stop mediarecorder
        try 
        {
            mediaRecorder.setOnErrorListener(null);
            mediaRecorder.setOnInfoListener(null);
            mediaRecorder.setPreviewDisplay(null);
            mediaRecorder.stop();
            mediaRecorder.release();
        }
        catch (IllegalStateException e)
        { <error message> }
        catch (RuntimeException e)
        { <error message> }
        catch (Exception e)
        { <error message> }
    <Code to draw a graph, ...>
    }
});