【达内课程】Android中的GC垃圾回收机制与内存泄漏

版权声明:本文为博主原创文章,未经博主允许不得转载。 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();
        }
    }

重复刚才操作,不会新增线程
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/u010356768/article/details/83021406