App MediaRecorder程序ANR

时间:2013-01-24 09:13:12

标签: android android-mediarecorder

我创建了这样的应用程序:

开始录制的代码

public static void startRecording() {

if (recordTime == 0) {
if (null == mr) {
mr = new MediaRecorder();
}
path = new File(Environment.getExternalStorageDirectory(),
"myRecording.3gp");
mr.reset();

获取ΪMicphone音乐小精灵

mr.setAudioSource(MediaRecorder.AudioSource.MIC);
mr.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
mr.setOutputFile(path.getAbsolutePath());
mr.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);

try {
mr.prepare();
} catch (IOException e) {
}
mr.start();
Record.recordTime = 1;
}
}

结束录制

public static void stopRecording() {
if (mr != null) {
// mr.reset();
mr.stop();
mr.release();
mr = null;
Record.recordTime = 0;
}

}

我重复快速通话录音 我反复快速调用录音并停止录音过程,会出现ANR现象。 谁知道问题是什么?
提前谢谢!

1 个答案:

答案 0 :(得分:3)

嗯......这篇文章有点陈旧,但由于我的情况非常相似,所以here发布的问题的解释对我来说很有意义。

当您停止录制时,视频将保存在手机存储器(内置或SD卡)中。由于这是一个繁重的I / O操作,应用程序可能不会响应一段时间,导致ANR。

我不知道,但你试过把停止放在另一个线程上吗?这可能适合你。

    public static void stopRecording() {
    if (mr != null) {
        new Thread(new Runnable() {
            @Override
            public void run() {
                mr.stop();
                mr.release();
                mr = null;
                Record.recordTime = 0;
            }
        }).start();
    }
}