1.多发于高版本机型上,目前来看是 8.0 以后才会出现 2.在表现正常的机型上,Activity 退出就能回收掉。 3.leakCanary 没有报内存泄漏。 4.进出该 Activity 多次,heap dump 出来看到所有该 Ativity 的实例的 shallow size 和 retained size 已经一样,只有几百 b 大小,但是不管多少次 GC 都不会回收掉,堆得越来越多。
有什么思路吗?
1 gam2046 2019-01-16 21:40:43 +08:00 治标不治本的方法: 1、Process.kill(...) 自杀所有进程 2、PendingIntent 计划 500ms 后重启应用 |
2 nicevar 2019-01-16 22:27:09 +08:00 在 8.1.0 的系统上也遇到类似的问题,我发现的情况是触发之后所有的应用都会出现,直到手机报内存不足然后卡顿得不行,需要强行停止,没救,问题不在应用上,是系统的锅 |
![]() | 3 mcj OP @nicevar 经过反复注释掉代码,隐约感觉和 fragment 的一些回收有关系,可能某部分代码刚好触发了底层一些不回收的逻辑,但是要排查出到底是什么原因很麻烦。pixel 2 也会出现这个问题,很有可能是 google 的锅。。。。 |
4 zhujinlong 2019-01-17 12:02:31 +08:00 既然已经 dump heap,快用 MAT 看下 Activity 被谁持有了强引用,我怀疑你的判断“ Activity 对象已经不可达”并不正确。 |
![]() | 5 mcj OP @zhujinlong 没有被持有强引用,且 8.0 以下版本一切正常,回收迅速,Leakcanary 中认为其“没有能达到 GC ROOT 的路径”所以不会报告。 |