2012-11-13 83 views
1

当我退出我的应用程序时(通过按回或主页按钮)Activity s onDestroy()方法被调用(我用位图进行大量清理)。当它被破坏后重新启动活动时,onCreate不会被调用

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

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

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

+0

Android版本?设备?你如何确认它没有被调用? – WarrenFaith

+0

当你按下主页按钮时,活动并没有被销毁,它只是在后台,并且方法onPause()被调用,并且当你再次启动时,方法onResume()将会被执行,方法onDestroy()当你按下后退按钮时执行,然后当你尝试重新启动你的活动时,onCreate()将被执行 – Houcine

+0

当你按下home按钮时,活动通常进入'onStop()'而不是'onDestroy()'。写一些日志消息'onCreate()','onStop()'和'onDestroy()'以确保你没有丢失任何东西...... – Luis

回答

0

的问题是与我是如何设置ImageView的图像。我原来加载从/ RE的图像的方式是:

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

显然,如果你再生一个位图,上面的代码不会为位图重新分配内存,并且当它试图绘制ImageView的程序将会崩溃。

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

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

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

3

你的应用程序必须做一些事情来强制确保onDestroy被调用,因为如果你看看Activity生命周期,没有办法从onDestroy返回onStart,它不包括onCreate。实际上,Activity通过反向回调将其初始化展开为将其恢复为恢复状态的初始化。看一看官方文档here也许你在某处调用了finish()方法来强制执行A​​ctivity?

+0

你是对的。 onCreate日志被忽略。所以,onCreate IS被调用,但我仍然尝试使用回收的位图错误。 – romamnmlst

+1

回收的位图错误与您如何调用createBitmap有关,而与Activity的生命周期无关。您需要提供应用程序中正在执行的代码片段,以了解您为何出现该错误。我假设你在位图上调用Bitmap :: recycle,你打算渲染到屏幕上,并且recycle命令在render命令之前执行,但是没有提供任何代码,这就是我得到的 –

+0

或者也许持有静态引用(或其他泄漏)的加载它的活动外的位图? – Simon

0

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

参考this

相关问题