创建一个会因为线程没有停止,导致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文件
接下来自己动手试试吧。
|