创建一个会因为线程没有停止,导致activity destroy无法回收对象而内存泄露的activity。
public class TestActivity extends Activity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test);
new Thread(new Runnable(){
@Override
public void run() {
try {
Thread.sleep(1000*1000L);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}).start();
}
}
1、首先在工具栏打开profiler
2、选择需要观察的应用
3、选择内存
4、依次点击手动GC,即可看到内存堆栈
5、点击查看leaks即可查看泄露activity可和fragment
6、依次选择类名->对象->展示最可能泄露的位置
即可看到最可能出现泄露的地方,shallow size指的是该对象本身占用内存的大小,retained Size代表该对象被释放后,垃圾回收器能回收的内存总和。
此时可选择注释相关代码,再次进入这个界面退出,再次查看这个界面的泄露位置,可逐一排查该界面的内存泄露。
选择堆栈后点击保存可保存为hprof文件,方便下次查看。
点击加号可选择导入保存的hprof文件
接下来自己动手试试吧。