Android在UI线程中等待而不冻结它

时间:2013-05-31 16:58:21

标签: android multithreading

在我的应用程序中,当用户按下按钮时,MediaRecorder开始录制音频,然后继续录制50秒并自动停止。我从UI线程启动录像机,但如何等待50秒而不冻结UI。这是我的代码:

MediaRecorder recorder = new MediaRecorder();
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
recorder.setOutputFile(path);
recorder.prepare();
recorder.start();
Thread.sleep(40000);
recorder.stop();
recorder.reset();
recorder.release();

我对线程知之甚少。请帮忙

1 个答案:

答案 0 :(得分:0)

对于类似的东西,Android提供了一些工具,因此您不需要线程。如果您有一个方便的View对象(或者此代码位于View子类中),您可以使用View.postDelayed(Runnable, long)安排Runnable在特定延迟后执行(以毫秒为单位。

// need to make recorder final so it can be referenced from anonymous Runnable
final MediaRecorder recorder = new MediaRecorder();
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
recorder.setOutputFile(path);
recorder.prepare();
recorder.start();
postDelayed(new Runnable() {
    @Override
    public void run() {
        recorder.stop();
        recorder.reset();
        recorder.release();
    }
}, 40000);

如果您没有方便的View,只需创建一个Handler并使用它的postDelayed方法。它的工作原理相同。