1

当我退出我的应用程序(通过按返回或主页按钮)时,将调用ActivitysonDestroy()方法(我在其中使用位图进行大量清理)。

当我重新打开应用程序时,onCreate()没有被调用...它直接进入onStart(),尽管Activity已经完成。这会导致“尝试使用回收的位图”错误。

有没有办法确保在销毁onCreate()后总是调用它?Activity

编辑:我错了。onCreate() 正在被调用。但是,我仍然收到“尝试使用回收的位图”错误。如果 onCreate() 正在执行所有步骤,是否不会重新加载任何回收的位图?

4

3 回答 3

3

您的应用程序必须采取措施强制确保调用 onDestroy,因为如果您查看 Activity 生命周期,则无法从不包含 onCreate 的 onDestroy 返回到 onStart。实际上,Activity 通过反向回调来展开其初始化,使其进入恢复状态。看看这里的官方文档也许你在某个地方调用了 finish() 方法来强制 Activity?

于 2012-11-13T23:14:14.297 回答
0

问题在于我如何设置 ImageView 图像。我从 /res 加载图像的原始方法是:

    image.setImageDrawable(getResources().getDrawable(R.drawable.myImage)); //WRONG!!!!

显然,如果您回收了位图,上述代码将不会为位图重新分配内存,并且您的程序在尝试绘制该 ImageView 时会崩溃。

加载已回收的位图的正确方法(或至少解决我的问题的方法)是:

    image.setImageDrawable(new BitmapDrawable(BitmapFactory.decodeResource(getResources(), R.drawable.myImage))); //correct!

它仍然没有回答我的问题,为什么在退出应用程序并调用 onDestroy 后,当我重新进入应用程序时,它正在寻找一个回收的位图。理论上,应用程序应该从头开始。

于 2012-11-19T00:29:46.023 回答
0

当你按下home键时,activity不会被销毁,它只是被发送到后台,并onPause()调用该方法,当你再次启动它时,该方法onResume()将被执行,onDestroy()当你按下返回键时该方法被执行或当您调用该方法finish()强制销毁活动,然后当您尝试重新启动活动时,onCreate()将执行。

参考这个

于 2012-11-13T23:14:53.803 回答