首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >应用程序MediaRecorder程序ANR

应用程序MediaRecorder程序ANR
EN

Stack Overflow用户
提问于 2013-01-24 17:13:12
回答 1查看 834关注 0票数 2

我像这样创建应用程序:

开始录制的代码

代码语言:javascript
复制
public static void startRecording() {

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

获取Ϊ麦克风音乐音量

代码语言:javascript
复制
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;
}
}

结束录制

代码语言:javascript
复制
public static void stopRecording() {
if (mr != null) {
// mr.reset();
mr.stop();
mr.release();
mr = null;
Record.recordTime = 0;
}

}

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

提前感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-10-10 03:03:40

好吧..。这篇文章有点老了,但由于我遇到的是一个非常相似的案例,here上发布的问题的解释对我来说是有意义的。

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

我不知道,但是你有没有试过在不同的线程上停止呢?这可能对你有用。

代码语言:javascript
复制
    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();
    }
}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14497608

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档