所以我发现,与我保持每surfaceCreate
如何解决涉及线程的Android内存泄漏?
我想我需要这些线程,虽然创建多个Threads
的MAT
,但这种方法会导致的ViewThread
多个实例,为用户浏览我的应用程序,这是内存泄漏。
如何重新组织我的线程创建和处理的方式,以防止发生这种情况,或者如何阻止泄漏发生?
@Override
public void surfaceCreated(SurfaceHolder holder) {
loading=false;
if (!mThread.isAlive()){
mThread = new ViewThread(this);
mThread.setMenuRunning(true);
mThread.start();
}
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
if (mThread.isAlive()){
mThread.setMenuRunning(false);
}
}
我打开,从我的游戏Career
活动导航走五次,这是对MAT
编辑显示的内容:因为我已经发现,根据surfaceDestroyed
为破坏我的线程是不可靠的。我现在从不同的方法调用相应的线程销毁调用,触发。
我试过了,而那些多个实例我的班级依然堆积如山。 – Houseman
在这种情况下,您可以使用MAT来查找从GC根到对象的路径。你可能会在监听器/观察者的某处找到另一个参考。这也可能是一个匿名的内部类。在这种情况下,尝试使用静态类,并在类的实例中使用弱引用。一旦gc运行,这将断开链接。您也可以尝试在适当的时候手动注销监听器。如果这不起作用,你可以分享MAT的屏幕截图,以显示GC根的路径吗? – nickmartens1980