在 onActivityResult 之前和之后调用 onCreate
Posted
技术标签:
【中文标题】在 onActivityResult 之前和之后调用 onCreate【英文标题】:onCreate called before and after onActivityResult 【发布时间】:2012-07-15 12:26:43 【问题描述】:我尝试以下方式打开相机:
...
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 从未调用过!
【问题讨论】:
请使用android-activity
标签而不是activity
标签:)
这可能有用***.com/questions/10411009/…
Akki,你真的帮了我!谢谢!
【参考方案1】:
实际上,相机会导致您的 Activity 的方向发生变化,这就是您的 Activity 被销毁和重新创建的原因。
将此添加到您的清单文件中,它将防止方向更改,并且您的活动不会被破坏和重新创建。
<activity
android:name=".YourActivity"
android:configChanges="orientation|keyboardHidden"
android:screenOrientation="portrait" >
</activity>
Activity killed / onCreate called after taking picture via intent
【讨论】:
如果您不能强制活动处于特定方向,您会怎么做?我遇到了类似的问题,无法强制定位... 我遇到了类似的问题。我的活动中有此代码。启动我的相机,但是因为我的活动在 OnActivityResult 回调之前和之后调用了 OnCreate,所以我放置的视图中永远不会看到图像,除非在活动开始之前设备处于横向模式。 这不是解决方案。如果您的设备在启动相机时没有足够的可用 RAM 将您的活动保存在内存中(发生这种情况……),问题仍然存在。 @MarcPlano-Lesay 你知道如何处理吗,我想保持我的活动并调用相机意图 @ParagPawar 你没有办法强制执行。如果需要内存,Android 将删除它。将您的状态保存在onPause
并在onResume
中恢复它。【参考方案2】:
onDestroy
不保证会被调用。确保将持久状态保存在onPause
而不是onStop
和onDestroy
。永远不要依赖 onStop
或 onDestroy
被调用。
【讨论】:
【参考方案3】:onDestroy 不保证会在任何安卓版本上执行,如果是,你应该快速执行一些操作并返回
也可以看到Activity OnDestroy never called?
【讨论】:
以上是关于在 onActivityResult 之前和之后调用 onCreate的主要内容,如果未能解决你的问题,请参考以下文章
关于片段生命周期,何时调用片段的 onActivityResult?
IllegalStateException:在 onSaveInstanceState 和 onActivityResult 之后无法执行此操作
onActivityResult 中的操作和“错误在 onSaveInstanceState 之后无法执行此操作”
当我调用 startResolutionForResult 时,onActivityResult() 没有在片段中执行