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 运行两次?如何解决?这个问题在 Android 2.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不保证被调用。确保将持久状态保存在onPause而不是onStopandonDestroy中。你永远不应该依赖任何一个onStop或被onDestroy调用。

于 2012-07-16T16:00:55.373 回答
1

onDestroy 不能保证在任何 android 版本上执行,如果确实如此,您应该快速执行一些操作并返回

还看到这个Activity OnDestroy 从未调用过吗?

于 2012-07-16T15:59:29.880 回答