android - 从相机应用程序返回时重新创建 Activity

标签 android android-lifecycle android-camera-intent activity-lifecycle

此问题仅出现在两台较旧的 Samsung Galaxy 机型上,但重现性很高。

我有一个简单的应用程序,可以显示通过设备的相机应用程序拍摄的照片。它有一个按钮来启动该应用程序,并在 AsyncTask 中处理结果以将其下采样到 ImageView 中。

问题出在从相机应用程序返回时的 Activity 流程:由于某种原因, Activity 被创建,进程导致 onActivityResult() 中的 AsyncTask,被销毁,仅立即重新创建。一旦 AsyncTask 完成,它就会持有对不正确/旧 Activity 的引用。

将一些调试语句放入各种生命周期回调中揭示了这种奇怪的行为:

06-02 16:01:53.509: I/myapp(4437): onCreate com.myapp.PhotoActivity_@488cbef8
06-02 16:01:53.509: I/myapp(4437): onResume com.myapp.PhotoActivity_@488cbef8
06-02 16:01:58.298: I/myapp(4437): onPause com.myapp.PhotoActivity_@488cbef8
06-02 16:01:59.470: I/myapp(4437): onStop com.myapp.PhotoActivity_@488cbef8
[a photo is taken in the camera app]
06-02 16:02:10.196: I/myapp(4437): onCreate com.myapp.PhotoActivity_@4874f8b8
06-02 16:02:10.251: I/myapp(4437): onActivityResult com.myapp.PhotoActivity_@4874f8b8
06-02 16:02:10.259: I/myapp(4437): onResume com.myapp.PhotoActivity_@4874f8b8
06-02 16:02:10.712: I/myapp(4437): onPause com.myapp.PhotoActivity_@4874f8b8
06-02 16:02:10.720: I/myapp(4437): onStop com.myapp.PhotoActivity_@4874f8b8
06-02 16:02:10.923: I/myapp(4437): onCreate com.myapp.PhotoActivity_@48817118
06-02 16:02:10.931: I/myapp(4437): onResume com.myapp.PhotoActivity_@48817118
06-02 16:02:12.564: I/myapp(4437): onBitmapLoaded com.myapp.PhotoActivity_@4874f8b8

调用 onActivityResult() 的 Activity 实例(注意上面的哈希码)不再与显示的最终实例匹配。当我通过 onBitmapLoaded() 加载位图完成时,它因此也持有不正确的实例。

为什么会发生这种情况,如何防止 Activity 被(不必要地)重新创建?

最佳答案

显然 configuration of application changes !在 onDestroy 中添加日志并改进 onCreate 中的日志以显示 Bundle savedInstanceState 的值是什么。如果 savedInstanceState 不为空,则配置更改会强制重新创建 Activity。 在 onSaveInstanceState(Bundle) 中添加日志可以帮助。

您可以通过设置 Activity 属性来处理自己的配置更改 android:configChanges在 list 中。

关于android - 从相机应用程序返回时重新创建 Activity ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10852048/

相关文章:

android - notifyItemChanged() 是否强制调用 onBindViewHolder()?

android - 当 ViewPager 显示 Fragment 时 EditText 自动打开软键盘

android - fragment 或 Activity 停止后停止所有事件

Android:通过相机拍摄照片后无法调用 onActivityResult() 方法

java - 使用 Object.wait 代替 Thread.sleep 进行时间同步

java - SharedPreference不保存以前的数据

android - Android Application.getInstance 是否一直存在?

android - 当应用程序处于后台时,变量保持其值多长时间?

Android 8.1 在调用 startActivityForResult() 时关闭 Activity

android - 在 Jellybean 中,相机 Intent 在使用 FileProvider 时返回 RESULT.CANCELLED