作家
登录

带你学开源项目:LeakCanary-如何检测 Activity 是否泄漏

作者: 来源: 2017-05-24 10:06:09 阅读 我要评论

常识点:

那要怎么实现 即时 GC 呢?

LeakCanary 参考了一段 AOSP 的代码

  1. // System.gc() does not garbage collect every time. Runtime.gc() is// more likely to perfom a gc.Runtime.getRuntime().gc(); 
  2. enqueueReferences(); 
  3. System.runFinalization();public static void enqueueReferences() {    /* 
  4.      * Hack. We don't have a programmatic way to wait for the reference queue 
  5.      * daemon to move references to the appropriate queues. 
  6.      */ 
  7.     try { 
  8.         Thread.sleep(100); 
  9.     } catch (InterruptedException e) {        throw new AssertionError(); 
  10.     } 
  11.  

忽视某些已知泄漏的类或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当前缓存了哪些大文件的小工具

Linux 用户可能经常碰到的一个问题是,机械有 16GB 内存之多,运行的过程也不多,然则剩下的 free 内存并不多,大年夜部分都被 buff 和 cache 占用了(比如下面我的 PC)。$ free -h >>>详细阅读


本文标题:带你学开源项目:LeakCanary-如何检测 Activity 是否泄漏

地址:http://www.17bianji.com/lsqh/35385.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)