Android 内存优化

1. 避免可控的内存泄漏

1.1 什么是内存泄漏

image.png

image.png

1.2 内存泄漏的场景

1.2.1 非静态内部类的静态实例

image.png

image.png

1.2.2 多线程相关的匿名内部类/非静态内部类

image.png

image.png

1.2.3 Handler 内存泄漏

image.png

image.png

1.2.4 未正确使用 Context

image.png

image.png

1.2.5 静态 View

image.png

1.2.6 WebView

image.png

使用 WebView 会把 WebView 的 APK 资源加载进来,而且应用生命周期结束前都不会被卸载。

# Android-WebView还会存在内存泄漏吗?

1.2.7 资源对象未关闭

image.png

1.2.8 集合中对象没清理

image.png

1.2.9 Bitmap 对象

image.png

1.2.10 监听器未关闭

image.png

2. Memory Monitor

2.1 使用 Memory Monitor

2.2 大内存申请与 GC

image.png

2.3 内存抖动

image.png

3. Allocation Tracker

3.1 使用 Allocation Tracker

3.2 alloc 文件分析

4. Heap Dump

4.1 使用 Heap Dump

4.1.1 总览视图

4.1.2 详情视图

4.2 检测内存泄漏

5. 内存分析工具 MAT

5.1 生成 hprof 文件

5.1.1 准备内存泄漏的代码

5.1.2 DDMS 生成 hprof 文件

5.1.3 Memory Monitor 生成 hprof 文件

5.2 MAT 分析 hprof 文件

5.2.1 Dominator Tree

Dominator Tree 意为支配树。

  • Shallow Heap
  • Retained Heap

image.png

image.png

image.png

5.2.2 Histogram

5.2.3 OQL

OQL 全称为 Object Query Language,类似于 SQL 的查询语言,用来查询当前内存中满足指定条件的所有对象。

5.2.4 对比 hprof 文件

6. LeakCanary

image.png

github.com/square/leak…

6.1 使用 LeakCanary

请看官方文档。

6.2 LeakCanary 应用举例

请看官方文档,下面举一个有些年月的例子。

  • RefWatcher

image.png

image.png

image.png

image.png

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享