Java 更新声级会冻结我的应用程序(我正在使用handler.post)
首先是一个小的介绍。我需要做一个应用程序,记录声音在一个高水平的准确性。要求我制作一个每毫秒记录10个或更多样本的应用程序 编辑:处理程序的初始化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
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, ...>
}
});