2012-07-16 56 views
4

后的onCreate叫我尝试打开摄像机方式如下:之前和onActivityResult

... 
    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从来没有叫过!

+0

请使用'Android的activity'标签,而不是'activity'标签:) – 2012-07-16 15:59:28

+2

这可能是有用的http://stackoverflow.com/questions/10411009/activity-killed-oncreate-通过意图后拍摄图片/ 10411504#10411504 – Akram 2012-07-16 16:13:13

+0

Akki,你真的帮了我!谢谢! – 2012-07-17 12:28:42

回答

17

其实相机会导致您的活动方位的变化,这就是为什么你的活动已被破坏并重新创建。

在你的清单文件中添加它会阻止方向改变,你的活动不会被破坏和重新创建。

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

Activity killed/onCreate called after taking picture via intent

+0

非常感谢[Akki](http://stackoverflow.com/users/932225/akki)的帮助 – 2012-07-17 12:33:50

+0

这是问题的正确答案。谢谢 – 2012-11-13 21:03:52

+0

如果您不能强制活动处于特定的方向,您会做什么?我遇到了类似的问题,无法强制定位... – Justin 2013-02-26 16:08:53

3

onDestroy不能保证被调用。确保在而不是onStoponDestroy中保存持久状态。您绝不应该依赖onStoponDestroy进行调用。