gpt4 book ai didi

java - Lunar Lander 中的 Android 垃圾收集

转载 作者:行者123 更新时间:2023-11-29 22:33:02 27 4
gpt4 key购买 nike

在月球着陆器示例(由 Google 的 Android 网站提供)中,在名为“run()”的方法中有一个主循环。下面是:

        @Override
public void run() {
while (mRun) {
Canvas c = null;
try {
c = mSurfaceHolder.lockCanvas(null);
synchronized (mSurfaceHolder) {
if (mMode == STATE_RUNNING) updatePhysics();
doDraw(c);
}
} finally {
// do this in a finally so that if an exception is thrown
// during the above, we don't leave the Surface in an
// inconsistent state
if (c != null) {
mSurfaceHolder.unlockCanvasAndPost(c);
}
}
}
}

那么现在,我的问题是:在每个循环中都使 c 为空并因此导致更多的垃圾收集不是很糟糕吗?可能是我理解的不够好,为什么一定要取消呢?

最佳答案

一点都不坏,它确保 Canvas 对象在重新创建时具有 0 或 null 引用。这是良好的编程习惯。

另请注意 finally 语句,确保如果存在有效的 Canvas 对象,则将其清除。如果它为 null,则将其重置为 null 没有任何缺点。没有罚款或需要额外清理。请记住,一个对象有一个地址,对 null 的引用确保它不指向某个可能潜伏(尚未清理)的有效对象。

此外,当您将变量初始化为 null 时,不会调用垃圾收集器。它只是意味着该对象不引用当前可能在内存中的任何内容。

关于java - Lunar Lander 中的 Android 垃圾收集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3143640/

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