4

Androidのドキュメント(Android Cameraのドキュメントリンク)で、onPause()アクティビティコールバックでCameraオブジェクト(およびMediaRecorder)をリリースすることが推奨されている理由がわからないため、何かが足りないようです。その時点でアクティビティがまだ表示されていて、Cameraがプレビューを実行している可能性があるのに、アクティビティがすでに非表示になっているのに、なぜCameraオブジェクトがonStop()ではなくonPause()で解放されるのでしょうか。MediaRecorderオブジェクトをonPause()で停止できることは理解していますが、Camera自体は私には意味がありません。ここで何が欠けていますか?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は、アクティビティが表示されなくなることを意味します。

onStopが呼び出されるのは、Androidがプロセスが不要になったと判断した場合のみです。

于 2012-08-07T03:58:30.230 に答える