退出活动后如何释放实际的Activity对象内存?

时间:2011-07-25 21:11:40

标签: android android-activity memory-management out-of-memory

我的Android应用程序出现了OutofMemoryError,并且对于最新情况我感到有点困惑。基本上发生了什么,我能够在前几次运行它,但当我尝试退出它然后再次快速重复打开它时,我得到一个内存不足错误。

我已经尝试过研究这个主题,并且发现recycle()方法一直是个问题。但是,我在每个位图(存储在一个对象容器中,存储在一个arraylist中)调用了循环方法,但仍然遇到了问题。

执行此操作后,我尝试使用Eclipse Memory Analyzer来查看堆转储,当我遇到奇怪的事情时。退出活动后(回到启动器活动,然后通过按钮再次打开活动),我使用内存分析器截取了堆转储的屏幕截图。事实证明,每次我退出并重新进入活动,正在创建活动对象的另一个实例,并且即使正在调用onDestroy()方法(也有回收/清理代码),旧的活动对象也没有被释放。

然后我尝试重写finalize方法,看看当活动退回到启动器活动时它是否被调用,但它没有被调用。我读了一些其他的stackoverflow线程,并不总是调用finalize(),所以最后,我仍然不确定是什么时候继续。

最终,我的问题是: 我怎么能确保在从活动退出到另一个活动后释放Activity对象(活动对象本身,而不是从活动创建的东西)?

3 个答案:

答案 0 :(得分:3)

听起来您的应用程序遭受内存泄漏,我建议您按照以下链接:
Avoiding Memory Leaks

Memory management for Android Apps

答案 1 :(得分:0)

一个选项是在清单文件中将启动模式设置为singleInstance或singleTask。这将确保不创建活动的另一个实例。

Documentation Example

答案 2 :(得分:-1)

释放活动对象的一种方法是调用onDestoy()方法。使用活动对象使其成为公共静态并在onDestroy()中将其设为null

Public static Your_activity obj;

然后在onCreate方法中通过此

初始化obj
obj=this;

并在onDestroy()方法中执行此操作:

obj= null;