安卓内存分析实例
来源:互联网 发布:哈弗红标 2.0 知乎 编辑:程序博客网 时间:2024/05/21 13:56
上一篇说了,内存分析的基本思路。没看的点这里 但只是说,不通过实践毕竟理解不深。这篇通过我在工作中遇到的一个实例来说一下具体的操作。
正如上篇所说的,我给应用加了LeakCanary后检测到了内存泄漏,而没有分析出原因。这时我就用Android Monitor来分析具体哪出错了。dump内存的.hprof文件后,我们直接点击右侧的Analyzer Tasks(直接帮我们分析出泄漏的acivity),结果如图:
可以看到帮我们分析出了有5个泄漏实例(所以为了结果明显,我们可以多次进入自己怀疑的activity.通过内存变化也能猜的差不多)。ok,现在我们知道是哪个activity泄漏了。那么为什么泄漏呢,我们点击其中一个并展开成如图所示:
可以看到引用链是CordovaWebVieActivity被webview引用并最终被application的mComponentCallbacks引用的。可以看出是webview作为中间人引起的这场流血事件。ok,我们网上搜一下webview的内存泄漏。[很高兴我们找到了一个很详细的](http://www.2cto.com/kf/201605/507075.html)。
于是我们在activity中加入以下代码
@Override protected void onDestroy() { if (webView_ != null) { if (webView_.getParent() instanceof ViewGroup) ((ViewGroup) webView_.getParent()).removeView(webView_); webView_.destroy(); webView_ = null; } super.onDestroy(); }
然后多次进入CordovaWebVieActivity后dump文件并点击Analyzer Tasks,这是你会发现第一张图的没有leaked Activitys了。也就是我们修复成功了。
0 0
- 安卓内存分析实例
- MAT 安卓内存分析工具
- 安卓开发-内存使用分析
- 安卓获取可用内存的分析
- 安卓内存泄露分析整理
- 安卓系统app可用内存分析
- 安卓常见的内存泄漏实例以及解决办法
- 安卓内存分析工具Mat的基本用法
- java垃圾回收与安卓内存分析
- 安卓handler内存泄漏分析及解决
- 安卓Handler实例
- 安卓ExpandableListView实例
- 安卓实例
- 内存管理MMU实例分析
- Java小实例内存分析
- Android内存泄漏分析实例
- Android内存泄漏分析实例
- 【JVM内存模型】实例分析
- 目标分解总结
- 【分布式数据库】【相关】
- Codeforces Round #392 (Div. 2) A(水)B(水、模拟) C(数学) D(贪心)
- android Html img 标签解析
- shell学习总结
- 安卓内存分析实例
- python中json.dumps
- Android常见错误
- JSONObject、JSONArray方法使用详解
- Un-sorted list, find the "k" largest value, the original list can be changed
- maven pom.xml详解
- php跨域问题 跨域上传图片 手机端上传图片 省市区联动 转64位字符串上传图片
- [线段树] [求区间最大] [定点修改]
- 通过exp再imp后,提高了fsfi值和oracle的响应速度