Android内存泄露检测之TextLine

自从有了Android Studio内存泄露检测工具后,感觉内存泄露检查起来方便多了,简单易上手。

附上官网链接:https://developer.android.google.cn/studio/profile/am-hprof.html

刚好最近项目上碰到了内存泄露问题,记录一下。

检测页面比较简单:一个RecyclerView,里面的item有个TextView在一定条件下会添加ClickSpan跳转到其它页面。

一开始使用的测试手机Vivo 5.1.1 Api 22

1.进入页面并退出,点击Android Monitors-GC-Dump Java Heap,如图



2.生成hprof文件,点击Analyzer Tasks,运行,发现Activity发生了泄露,泄露发生在RecyclerView 的Adapter。

Android内存泄露检测之TextLine_第1张图片


3.展开Adapter查看具体泄露的地方。this$0表示Adapter的内部类CharacterStyle(ClickableSpan)未能销毁,因为内部类会持有外部类的隐式引用,所以发生了泄露,最后泄露的地方是在TextLine的sCached。

Android内存泄露检测之TextLine_第2张图片


这个是源码泄露,搜索了一下相关的文章,找到一篇

工作中遇到的Android内存优化问题(2)

但是按照里面的说法,5.1以上应该已经修复了,于是我又换了个4.4的手机试了一下,最后发现4.4手机是一定会内存泄露,而这个5.1的手机是有时候会泄露,有时候却又不会,即非必现的。

最后我使用的解决方法是在页面销毁时手动清空了recyclerview的所有项。

你可能感兴趣的:(Android,android,TextLine,ClickSpan)