4

我似乎遗漏了一些东西,因为我不明白为什么在 Android 文档(Android Camera 文档链接)中建议在 onPause() Activity 回调中释放 Camera 对象(以及 MediaRecorder)?到那时 Activity 仍然可能是可见的,并且 Camera 可能正在运行预览,那么为什么当 Activity 已经隐藏时,Camera 对象会在 onPause() 而不是 onStop() 中释放?我知道 MediaRecorder 对象可以在 onPause() 中停止,但相机本身对我来说没有意义。我在这里想念什么?Android 文档中的一段代码如下(在“释放相机”标题下):

    @Override
protected void onPause() {
    super.onPause();
    releaseMediaRecorder();       // if you are using MediaRecorder, release it first
    releaseCamera();              // release the camera immediately on pause event
}

private void releaseMediaRecorder(){
    if (mMediaRecorder != null) {
        mMediaRecorder.reset();   // clear recorder configuration
        mMediaRecorder.release(); // release the recorder object
        mMediaRecorder = null;
        mCamera.lock();           // lock camera for later use
    }
}
4

4 回答 4

3

一旦您的活动收到 onPause 消息,这意味着用户可能正在使用或将要使用其他应用程序.. 在这种情况下,如果他尝试通过其他应用程序使用相机,则相机必须由您的应用程序释放或释放。

于 2012-08-07T04:17:47.140 回答
2

根据应用程序生命周期

Paused
    Another activity is in the foreground and has focus, but this one is 
            still visible. That is, another activity is visible on top of this 
            one and that activity is partially transparent or doesn't cover the 
            entire screen. (...)

我认为文档遵循“尽快释放资源”的经验法则:onPause早于onStop.

背景窗口中的摄像头需要能量,而用户必须注意弹出窗口。

背景中的相机当然更舒适,但对于手机的电池寿命来说,时间更重要。

拦截您的活动的弹出窗口可能需要摄像头和/或可能需要大量内存。

在您的场景中,当相机应在后台继续录制时,相机的生命周期和录制应由服务控制

于 2012-08-07T04:18:18.500 回答
0

由于onStop() 不能保证被调用,你不能总是在 onStop() 中做onPause().

详细回答

onPause()总是被调用。这是有保证的。如果您需要在您的活动中保存任何状态,您onPause(). onStop()可能会在 onPause() 之后调用您需要保存的状态,也可能不会。视情况而定。

于 2015-05-04T07:41:02.293 回答
-1

onPause 意味着您的活动不再可见。

仅当 Android 认为不再需要您的进程时才会调用 onStop。

于 2012-08-07T03:58:30.230 回答