gpt4 book ai didi

android - 如何修复涉及线程的 Android 内存泄漏?

转载 作者:塔克拉玛干 更新时间:2023-11-02 18:53:14 24 4
gpt4 key购买 nike

所以我发现,使用 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 上显示的内容

leak

编辑:从那以后,我发现根据 surfaceDestroyed 来销毁我的线程是不可靠的。我现在从不同的方法调用适当的线程销毁调用,触发 onPause

最佳答案

您应该使用 Wea​​kReference 来引用线程中的 Career。这样,当不再有对职业的硬引用时,引用将被清除。

您可以通过右键单击职业并选择 Path To GC Roots,然后选择所有引用来跟踪 MAT 中的所有引用。这将向您显示内存中保留的对象的路径。确保在完成 Activity 后清除这些引用,或者使用 Wea​​kReferences 让 GC 自动清除它们。

关于android - 如何修复涉及线程的 Android 内存泄漏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14677913/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com