4

私は次の方法でカメラを開いてみます:

...
    private void runCamera() {
        String storageState = Environment.getExternalStorageState();
        if (storageState.equals(Environment.MEDIA_MOUNTED)) {

            Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
            File imageFile = new File(Singleton.instanse.mPushFilePath);
            mImageFileUri = Uri.fromFile(imageFile);
            intent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT,
                    mImageFileUri);
            startActivityForResult(intent, CAMERA_RESULT);
    }
...

このメソッドを実行する場合は、次のメソッドを実行します。

07-16 19:46:22.264: I/System.out(6875): -onPause
07-16 19:46:26.104: I/System.out(6875): -onStop

写真を作成し、次のメソッドを実行します。

07-16 19:46:41.217: I/System.out(6875): -onDestroy
07-16 19:46:41.284: I/System.out(6875): -onCreate
07-16 19:46:41.291: I/System.out(6875): -onStart
07-16 19:46:41.295: I/System.out(6875): -onActivityResult
07-16 19:46:41.295: I/System.out(6875): -onResume
07-16 19:46:41.295: I/System.out(6875): -onPostResume
07-16 19:46:41.522: I/System.out(6875): -onPause
07-16 19:46:41.522: I/System.out(6875): -onStop
07-16 19:46:41.522: I/System.out(6875): -onDestroy
07-16 19:46:41.604: I/System.out(6875): -onCreate
07-16 19:46:41.612: I/System.out(6875): -onStart
07-16 19:46:41.616: I/System.out(6875): -onResume
07-16 19:46:41.616: I/System.out(6875): -onPostResume

なぜonDestroyはtwiсeを実行するのですか?それを修正する方法は?この問題はAndroid2.2で見つかりました。Android 2.3.3では、onDestroyは呼び出されませんでした。

4

3 に答える 3

15

実際には、カメラによってアクティビティの向きが変化するため、アクティビティが破棄されて再作成されます。

これをマニフェストファイルに追加すると、向きの変更が防止され、アクティビティが破棄されて再作成されることはありません。

<activity
    android:name=".YourActivity"
    android:configChanges="orientation|keyboardHidden"
    android:screenOrientation="portrait" >
</activity>

インテントを介して写真を撮った後にアクティビティが強制終了/onCreateが呼び出されました

于 2012-07-17T12:30:30.563 に答える
4

onDestroy呼び出される保証はありません。andonPauseではなくで永続状態を保存するようにしてください。どちらかに頼ったり、呼ばれたりしないでください。onStoponDestroyonStoponDestroy

于 2012-07-16T16:00:55.373 に答える
1

onDestroyは、Androidのバージョンで実行されることが保証されていません。実行された場合は、何かをすばやく実行して戻る必要があります。

また、このアクティビティOnDestroyが呼び出されたことはありませんか?

于 2012-07-16T15:59:29.880 に答える