从相机应用程序返回时重新创建活动

2024-02-13

此问题仅出现在两款较旧的三星 Galaxy 机型上,但仍然非常容易重现。

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

从相机应用程序返回时的活动流程会出现问题:由于某种原因,活动被创建,进程导致 AsyncTask 在onActivityResult(),被破坏后,只能立即重新创建。一旦 AsyncTask 完成,它就会保存对不正确/旧活动的引用。

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

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()被调用的(注意上面的哈希码)不再匹配正在显示的最终实例。当我的位图加载通过时onBitmapLoaded()完成,因此它也保存了错误的实例。

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


显然应用程序配置更改 http://developer.android.com/reference/android/app/Activity.html#ConfigurationChanges!在onDestroy中添加日志并改进onCreate中的日志以显示Bundle的价值已保存实例状态。如果savedInstanceState不为空,则配置更改将强制重新创建活动。 添加登录onSaveInstanceState(捆绑) http://developer.android.com/reference/android/app/Activity.html#onSaveInstanceState%28android.os.Bundle%29可以帮忙。

您可以通过设置 Activity 属性来处理自己的配置更改android:配置更改 http://developer.android.com/guide/topics/manifest/activity-element.html#config在清单中。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从相机应用程序返回时重新创建活动 的相关文章

随机推荐