Hou*_*man 8 android memory-leaks
所以我发现,与MAT我保持创建多个Threads每surfaceCreate
我认为我需要这些线程,但是这个方法导致多个实例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);
}
}
Run Code Online (Sandbox Code Playgroud)
我打开并远离Career我的游戏活动五次,这就是出现在MAT

编辑:我已经发现,依赖于surfaceDestroyed我的线程的破坏是不可靠的.我现在调用来自不同方法的相应线程销毁调用,触发onPause.
您应该使用 WeakReference 来引用线程中的职业。这样,当不再有对职业的硬引用时,引用将被清除。
您可以通过右键单击职业并选择“GC 根路径”,然后选择所有引用来跟踪 MAT 中的所有引用。这将向您显示内存中保留的对象的路径。确保在完成活动后清除这些引用,或者使用 WeakReferences 让 GC 自动清除它们。
| 归档时间: |
|
| 查看次数: |
2081 次 |
| 最近记录: |