常识点:
那要怎么实现 即时 GC 呢?
LeakCanary 参考了一段 AOSP 的代码
- // System.gc() does not garbage collect every time. Runtime.gc() is// more likely to perfom a gc.Runtime.getRuntime().gc();
- enqueueReferences();
- System.runFinalization();public static void enqueueReferences() { /*
- * Hack. We don't have a programmatic way to wait for the reference queue
- * daemon to move references to the appropriate queues.
- */
- try {
- Thread.sleep(100);
- } catch (InterruptedException e) { throw new AssertionError();
- }
- }
忽视某些已知泄漏的类或Activity
LeakCanary 供给了 ExcludedRefs 类,可以向琅绫擎添加某些主动忽视的类。比如已知 Android 源代率攀里有某些内存泄漏,不属于我们 App 的泄漏,那么就可以 exclude 掉落。
别的,如不雅不想监控某些特别的 Activity,那么可以在 onActivityDestroyed(Activity activity) 里,过滤掉落特别的 Activity,只对其它 Activity 调用 refWatcher.watch(activity) 监控。
把内存泄漏数据上传至办事器
在 LeakCanary 供给了 AbstractAnalysisResultService ,它是一个 intentService,接收到的 intent 内包含了 HeapDump 数据和 AnalysisResult 结不雅,我们只要持续这个类,实现本身的 listenerServiceClass ,就可以将堆数据和分析结不雅上传到我们本身的办事器上。
常识点:
小结
本文经由过程源代码分析了 LeakCanary 的道理,并提出了一些有趣的问题,进修了一些实用的常识点。欲望对读者有所启发,迎接与我评论辩论。
之后会持续遴选优质开源项目进行分析,迎接提看法。
【义务编辑:枯木 TEL:(010)68476606】3. 若何快速断定当前是否运行在主线程?
推荐阅读
Linux 用户可能经常碰到的一个问题是,机械有 16GB 内存之多,运行的过程也不多,然则剩下的 free 内存并不多,大年夜部分都被 buff 和 cache 占用了(比如下面我的 PC)。$ free -h >>>详细阅读
本文标题:带你学开源项目:LeakCanary-如何检测 Activity 是否泄漏
地址:http://www.17bianji.com/lsqh/35385.html
1/2 1