我有一个应用程序在其中调用自定义活动,以便录制音频和视频。它使用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,但没有一个答案奏效。我真的很难过这个。
答案 0 :(得分:1)
此类代码应放在onPause()
而不是onDestroy()
中,以确保在需要时调用它。
注意:不要指望将此方法称为保存数据的地方!例如,如果活动正在内容提供商中编辑数据,则应在onPause中提交这些编辑( )或onSaveInstanceState(Bundle),不在这里。通常实现此方法是为了释放与活动相关联的线程之类的资源,以便在其应用程序的其余部分仍在运行时,被破坏的活动不会留下这些东西。在某些情况下,系统会在不调用此方法(或其他任何方法)的情况下简单地终止活动的托管过程,因此不应将其用于执行过程消失后要保留的内容。
您不是在这里保存数据,但同样的原则适用。因此,在onPause()
中停止录制将保证代码在用户按下“返回”按钮时运行。
覆盖onBackPressed()
也会有效,但如果Activity
因其他原因进入后台,则无法解释。