Android onCreate在onActivityResult之前和之后调用

Android onCreate在onActivityResult之前和之后调用,android,android-activity,android-camera,Android,Android Activity,Android Camera,我尝试按以下方式打开相机: ... private void runCamera() { String storageState = Environment.getExternalStorageState(); if (storageState.equals(Environment.MEDIA_MOUNTED)) { Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTUR

我尝试按以下方式打开相机:

...
    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
我制作照片,结束运行下一步方法:

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从未调用过

onDestroy不能保证在任何android版本上执行,如果执行了,您应该快速执行并返回


另请参见此

onDestroy
不保证被调用。确保将持久状态保存在
onPause
中,而不是
onStop
onDestroy
。您永远不应该依赖于调用
onStop
onDestroy

实际上,摄像机会导致活动中的方向改变,这就是活动被破坏和重新创建的原因

<activity
    android:name=".YourActivity"
    android:configChanges="orientation|keyboardHidden"
    android:screenOrientation="portrait" >
</activity>
将其添加到清单文件中,这样可以防止方向更改,并且不会破坏和重新创建活动

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

请使用
android activity
tag而不是
activity
tag:)这可能很有用,Akki,你真的帮了我的忙!非常感谢。如果你不能强迫活动以特定的方向进行,你会怎么做?我遇到了一个类似的问题,无法强制进行定向…我遇到了一个类似的问题。我的活动中有此代码。启动我的相机,但由于我的活动在OnActivityResult回调之前和之后调用OnCreate,因此在我放置的视图中永远看不到图像,除非设备在活动开始前处于横向模式。这不是解决方案。如果您的设备没有足够的可用RAM,无法在启动相机时将活动保存在内存中(发生了…),则问题仍然存在。@MarcPlano Lesay您知道如何处理该问题吗,我想保留活动并给相机打电话intent@ParagPawar你没有办法强制执行。如果需要内存的话,安卓会把它去掉。在
onPause
中保存状态,并在
onResume
中恢复状态。