Android:在旋转屏幕时删除/销毁对象

时间:2010-01-25 11:59:58

标签: android memory-leaks object

我发现在一次或多次屏幕旋转后性能下降,我认为这很可能是因为每次屏幕旋转时应用程序的主Activity都会被销毁并重新创建,而我的应用程序必须在内存时泄漏内存发生的情况。

我已经读过,与人们的预期相反,并不是当活动被销毁时,应用程序的主Activity(或者Activity中调用的类)创建的所有对象都不会被销毁。具体来说,我想我已经阅读过(虽然我现在无法找到),如果View使用大型位图成员对象,那么Activity的onDestroy()方法应该被覆盖,并且应该显式地回收位图。

销毁活动时是否还需要销毁或删除其他对象?听众怎么样?是否有关于此主题的综合教程或指南?

2 个答案:

答案 0 :(得分:5)

  

是否有全面的教程或   关于这个主题的指南?

不是。

  

是否还有其他需要的对象   当被摧毁或被移除时   活动被破坏了?关于什么   听众?

位图很不寻常,部分原因是如果我正确理解拜占庭式的Android内存模型,它们会使用16MB堆之外的内存。

除了大位图之外,您真正需要担心的最重要的事情是阻止正常垃圾收集工作的事情。从静态上下文直接或间接保留活动的任何内容都将使活动不被垃圾收集。例子包括:

  • 类上的静态数据成员(例如,您使用其中一个服务来装配自己的侦听器框架,因此您的服务保留在一个保留您的活动的侦听器上)
  • 线程(例如,您手动分叉后台线程但不终止它)

答案 1 :(得分:1)

请注意,将android:configChanges="orientation"放在Manifest中会阻止在旋转屏幕时销毁Activity。所以我不再需要担心我是否需要销毁或删除单个位图或其他对象! (感谢Ribo将其指向另一个主题。)