此问题仅发生在两个较旧的三星Galaxy型号上,但仍具有很高的可重现性。
我有一个简单的应用程序,显示通过设备的相机应用程序拍摄的照片。它有一个按钮来启动该应用程序,并在AsyncTask中处理结果,将其下采样到ImageView。
从相机应用程序返回时活动的流程出现问题:由于某种原因,活动被创建,进程导致onActivityResult()
中的AsyncTask被破坏,只能立即重新创建。一旦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()
加载的位图完成时,它也会保存不正确的实例。
为什么会发生这种情况,如何防止(不必要地)重新创建活动?
答案 0 :(得分:2)
显然configuration of application changes!在onDestroy中添加日志并改进登录onCreate以显示Bundle savedInstanceState 的值。如果savedInstanceState不为null,则配置更改强制重新创建Activity。 在onSaveInstanceState(Bundle)中添加日志可能会有所帮助。
您可以通过在清单中设置活动属性android:configChanges来处理自己的配置更改。
答案 1 :(得分:0)