首先自己写了一个由单例模式导致的内存泄漏
public class Manager {
public static final Manager ourInstance = new Manager();
private Context mContext;
public static Manager getInstance() {
return ourInstance;
}
public void init(Context context) {
mContext = context;
}
}
复制代码
然后新建了一个SecondActivity调用Manager的init方法,将SecondActivity的context传给Manager,当SecondActivity销毁后,并不能被回收,就导致了内存泄漏。
PS:华为手机不能用Profile分析,可以用小米或者oppo手机
点击profile
- 先点击Profile
- 点击Memory中的区域
- 点击想要检测的一个时刻
- 点击Dump Java heap
此时已经发现了一个内存泄漏
- 点击Arrange by package, 就可以在包的目录下,发现SecondActivity没有被回收(此时我已经退出了页面)
- 双击SecondActivity可以参考该对象占用的内存信息
- 点击References, 可以看到该对象的引用链,进而可以定位具体问题,从而解决内存泄漏
以上就是用profile分析内存泄漏的步骤,给自己一个赞。