版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010356768/article/details/83021406
当main()方法执行完,main()方法中的局部变量都会弹栈,从栈当中销毁
当左侧栈中的e2和e销毁后,右侧中的两个对象就是垃圾
java底层有一种GC垃圾回收机制,在java程序运行时,GC线程会不断找寻垃圾,是的话会清除掉
当我们点击模拟机的返回键时,发生了什么
当GC想回收Activity时,发现被Adapter引用
当GC想回收Adapter时,发现有一条阻塞的线程
当我们点击手机的返回键时,Activity并不会被销毁,当再打开时,我们观察运行的线程,会增加一条。返回再打开,又会增加线程…
如何查看工作的线程
解决办法如下:
在NewMusicListFragment中重写onDestroy()方法
@Override
public void onDestroy() {
//把adapter中的线程销毁
adapter.stopThread();
super.onDestroy();
}
MusicAdapter中增加stopThread()方法
public void stopThread() {
//isLoop为false,循环停止
isLoop = false;
//当我们按返回键时,线程在wait(),应先唤醒
synchronized (workThread) {
workThread.notify();
}
}
重复刚才操作,不会新增线程