所以我发现,使用 MAT
,我不断地用每个 surfaceCreate
Threads
虽然我认为我需要这些线程,但是当用户浏览我的应用程序时,此方法会导致 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
Activity 并导航离开,这就是 MAT
上显示的内容
编辑:从那以后,我发现根据 surfaceDestroyed
来销毁我的线程是不可靠的。我现在从不同的方法调用适当的线程销毁调用,触发 onPause
。
最佳答案
您应该使用 WeakReference 来引用线程中的 Career。这样,当不再有对职业的硬引用时,引用将被清除。
您可以通过右键单击职业并选择 Path To GC Roots,然后选择所有引用来跟踪 MAT 中的所有引用。这将向您显示内存中保留的对象的路径。确保在完成 Activity 后清除这些引用,或者使用 WeakReferences 让 GC 自动清除它们。
关于android - 如何修复涉及线程的 Android 内存泄漏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14677913/