gpt4 book ai didi

android - 我真的需要在动态壁纸的渲染循环中在 SurfaceHolder 上同步吗

转载 作者:行者123 更新时间:2023-11-29 16:04:24 27 4
gpt4 key购买 nike

我正在为 Android 中的动态壁纸实现一个渲染循环。我在 Internet 上找到的所有示例都包含这样的渲染循环:

public void run() {
while (mRunning) {
Canvas c = null;
try {
c = mSurfaceHolder.lockCanvas(null);
synchronized (mSurfaceHolder) {
doUpdate();
doDraw(c);
}
} finally {
if (c != null) {
mSurfaceHolder.unlockCanvasAndPost(c);
}
}
}
}

我真的需要同步动态壁纸中的 mSurfaceHolder 对象吗?

这样的问题已经讨论过了here早些时候,但没有给出确切的答案。也是 Jason Nichols 的答案 here状态:

I don't understand why your synchronizing in your rendering loop. This is bad form as it may lock up your rendering thread, causing the app to appear to freeze if it can't acquire the lock immediately for any reason. It also takes time to get acquire the lock.

If you've got your data organized in such a way that you need to get a lock in your rendering thread, you need to refactor your design.

我真的很沮丧!

更新

我通常需要在渲染循环中进行任何同步吗?对渲染循环性能的影响有多大?

最佳答案

您不需要在 mSurfaceHolder 上同步。这段代码可能取自 SDK 的 Lunar Lander 示例,并在网络上更改了太多次,以至于失去了上下文。 SurfaceHolder 已被选为提供内在锁的对象,但也可以使用任何其他对象。

关于android - 我真的需要在动态壁纸的渲染循环中在 SurfaceHolder 上同步吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20728540/

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