美文网首页
三个方法帮助解决Android内存泄漏问题

三个方法帮助解决Android内存泄漏问题

作者: HelloLeol | 来源:发表于2020-07-29 00:03 被阅读0次

    三个方法帮助解决Android内存泄漏问题

    最近自己遇到了好几个内存泄漏的问题,也帮同事解决了几个内存泄漏的问题记录一下

    常用的检测内存泄漏有三个方法

    1 Leakcanary工具检测

    2 adb命令 adb shell dumpsys meminfo [package_name ] or [pid]

    3 AS自带的内存监测工具

    LeakCanary

    LeakCanary的使用十分简单只要直接引用就可以了 新版本不再需要添加权限或在App内初始化

    dependencies {
      // debugImplementation because LeakCanary should only run in debug builds.
      debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.4'
    }   
    

    在Logcat中可以搜索到下面这句话即运行成功

    D LeakCanary: LeakCanary is running and ready to detect leaks
    

    可以自动检测以下所有已销毁但泄漏的实例

    1⃣️ destroyed Activity instances

    2⃣️ destroyed Fragment instances

    3⃣️ destroyed fragment View instances

    4⃣️ cleared ViewModel instances

    LeakCanary总的来说是一个很有效而且集成简单的工具。但有时可能时效性不是那么快。适合集成在debug版本中做一个兜底保护。

    leakcanary.png

    二 ADB命令

    ADB命令相对AS自带的工具要稍微直观一点,相对LeakCanary时效性要好一些。

    adb shell dumpsys meminfo [package_name] or [pid]
    

    其中native和dalvik,dalvik就是java堆,普通java对象是在java堆分配,而bitmap是直接在native上分配,对于内存的限制是 native+dalvik 不能超过最大限制。android程序内存一般限制在16M或24M。

    此外下面的objects可以帮助我们快速定位是View/Activity/Webview等一些经常发生泄漏的地方。

    dumpsys.png

    三 Profile

    AS里面自带的性能监控工具非常好使,其中一项可以帮助监控内存变化。

    选择Memory一栏,再选中一段时间的区间。可以很清楚的看到相关细节,包括对象报名数量大小等。

    遇到复杂的内存泄漏问题可以通过这个方式排查


    as.png

    相关文章

      网友评论

          本文标题:三个方法帮助解决Android内存泄漏问题

          本文链接:https://www.haomeiwen.com/subject/rqecrktx.html