Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/184.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
Android App MediaRecorder程序ANR_Android_Android Mediarecorder - Fatal编程技术网

Android App MediaRecorder程序ANR

Android App MediaRecorder程序ANR,android,android-mediarecorder,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(); public static void stopRecor

我创建的应用程序如下所示:

开始录制的代码

public static void startRecording() {

if (recordTime == 0) {
if (null == mr) {
mr = new MediaRecorder();
}
path = new File(Environment.getExternalStorageDirectory(),
"myRecording.3gp");
mr.reset();
public static void stopRecording() {
if (mr != null) {
// mr.reset();
mr.stop();
mr.release();
mr = null;
Record.recordTime = 0;
}

}
获取ΪMicphone音乐volime

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 startRecording() {

if (recordTime == 0) {
if (null == mr) {
mr = new MediaRecorder();
}
path = new File(Environment.getExternalStorageDirectory(),
"myRecording.3gp");
mr.reset();
public static void stopRecording() {
if (mr != null) {
// mr.reset();
mr.stop();
mr.release();
mr = null;
Record.recordTime = 0;
}

}
我重复了快速通话录音 我反复快速呼叫录音并停止录音过程,会出现ANR现象。 谁知道问题出在哪里?

提前谢谢

嗯。。。这篇文章有点老了,但因为我有一个非常类似的案例,所以对这个问题的解释对我来说是有意义的

当您停止录制时,视频将保存在手机存储器(内置或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();
    }
}

介意添加logcat。有了它,你就更容易找到你的ANR原因了。顺便说一句您没有在UI线程中执行此操作,是吗?