当我退出我的应用程序时(通过按回或主页按钮),会调用Activity
onDestroy()
方法(我使用位图进行大量清理)。
当我重新打开该应用时,onCreate()
不会被调用...它会直接转到onStart()
,尽管Activity
已完成。这导致“尝试使用回收的位图”错误。
有没有办法确保在onCreate()
被销毁后始终调用Activity
?
答案 0 :(得分:3)
你的应用程序必须做一些事情来强制确保调用onDestroy,因为如果你看一下Activity生命周期,就没有路径可以从不包含onCreate的onDestroy返回onStart。实际上,一个Activity通过反向回调将其初始化展开到使其进入恢复状态的回调。看一下官方文档here也许你在某个地方调用finish()方法来强制调用Activity?
答案 1 :(得分:0)
当您按下主页按钮时,活动不会被销毁,它只会被发送到后台,并且会调用方法onPause()
,当您再次启动它时,方法onResume()
将会是执行时,按下后退按钮或当您调用方法onDestroy()
以强制销毁活动时执行方法finish()
,然后当您尝试重新启动活动时,onCreate()
1}}将被执行。
参考this
答案 2 :(得分:0)
问题在于我如何设置ImageView图像。我从/ res加载图像的原始方法是:
image.setImageDrawable(getResources().getDrawable(R.drawable.myImage)); //WRONG!!!!
显然,如果你回收一个位图,上面的代码将不会为位图重新分配内存,并且你的程序在尝试绘制ImageView时会崩溃。
加载已经回收的位图(或者至少是解决我的问题的方式)的正确方法是:
image.setImageDrawable(new BitmapDrawable(BitmapFactory.decodeResource(getResources(), R.drawable.myImage))); //correct!
它仍然没有回答我的问题,为什么在退出应用程序后调用onDestroy,当我重新进入应用程序时,它正在寻找一个回收的位图。从理论上讲,应用程序应该从头开始。