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

pre*_*bgg 3 android memory-leaks object

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

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

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

Com*_*are 5

有关于这个主题的综合教程或指南吗?

并不是的.

销毁活动时是否还需要销毁或删除其他对象?听众怎么样?

位图是不寻常的,部分是因为他们使用16MB堆之外的内存,如果我正确理解拜占庭Android内存模型.

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

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