应用程序挂起在Camera.release()

时间:2014-05-26 20:45:27

标签: java android camera mediarecorder

我有一个应用程序在其中调用自定义活动,以便录制音频和视频。它使用MediaRecorder和Camera类。我的问题是,当用户点击后退按钮或在视频正在录制时取消时,活动始终挂在Camera.release()上,但如果先按下停止按钮,则没有问题。这是我的代码:

停止按钮代码:

mRecorder.stop();   // Stop recording
mRecorder.reset();  // Reset recorder
camera.stopPreview();

的onDestroy():

mRecorder.reset();  // Release media recorder
mRecorder.release();
if (camera != null) {
    camera.stopPreview();
    camera.setPreviewCallback(null);
    camera.release();
}
mRecorder = null;
camera = null;

我尝试将mRecorder.stop()添加到onDestroy(),但是没有解决它。我检查了here,但没有一个答案奏效。我真的很难过这个。

1 个答案:

答案 0 :(得分:1)

此类代码应放在onPause()而不是onDestroy()中,以确保在需要时调用它。

According to the docs

  

注意:不要指望将此方法称为保存数据的地方!例如,如果活动正在内容提供商中编辑数据,则应在onPause中提交这些编辑( )或onSaveInstanceState(Bundle),不在这里。通常实现此方法是为了释放与活动相关联的线程之类的资源,以便在其应用程序的其余部分仍在运行时,被破坏的活动不会留下这些东西。在某些情况下,系统会在不调用此方法(或其他任何方法)的情况下简单地终止活动的托管过程,因此不应将其用于执行过程消失后要保留的内容。

您不是在这里保存数据,但同样的原则适用。因此,在onPause()中停止录制将保证代码在用户按下“返回”按钮时运行。

覆盖onBackPressed()也会有效,但如果Activity因其他原因进入后台,则无法解释。