在我的应用程序的简化版本,我有两个活动,A和B. Actvity A开始B,经过一番工作,B调用完成()。 在大多数设备上使用内存分析工具(Galaxy Nexus的运行4.2的Droid 4运行4.0.4,和Droid 2的运行2.3.4)没有显示出活性B,这是我所期待的痕迹。
但在三星S3运行4.1.1,MAT展示活动B各地对象是,由于路径以下GC根(弱/软引用除外):
Class Name | Shallow Heap | Retained Heap
-------------------------------------------------------------------------------------------------
com.myCo.myApp.ActivityB @ 0x42720818 | 264 | 3,280
|- <Java Local> java.lang.Thread @ 0x4271cf60 Thread-21941 Thread| 80 | 52,264
|- mOuterContext android.app.ContextImpl @ 0x426adf68 | 104 | 784
| '- mContext android.media.AudioManager @ 0x428e49a0 | 48 | 152
-------------------------------------------------------------------------------------------------
我每次启动和停止活动B,MAT展示活动B的内存占用的另一个实例。 而更多的我打开/关闭活动B,做大在logcat中报道的内存占用。 通过MAT强制GC不排除到活动B内存的引用。
我有三个问题。
为什么内存/ GC行为跨越不同设备的不同?
在S3,将操作系统最终会回来,GC滞留b活动对象(换句话说,我不应该担心,因为Android将在崩溃之前清理)?
如果没有,你在哪里的主题和AudioManager引用来的,我会怎么清除呢?
由于有经验的“泄漏猎人”在那里!