我一直在 Android 中绘制图形。那里有很多示例应用程序,但我总是看到的一件事是 lockCanvas。有人可以更详细地解释一下,因为我真的不明白,也因为我认为理解 future 的编程很重要吗?

一个例子:

try {
    c = panel_thread.getHolder().lockCanvas(null);
    synchronized (panel_thread.getHolder()) {
        panel_thread.update();
        panel_thread.onDraw(c);
    }
}

这就是我现在所拥有的。
我应该如何正确解释这个?同步有什么作用?为什么将 Canvas 对象分配给 getHolder 和 lockCanvas 很重要?

这部分也令人困惑:
panel_thread.getHolder().unlockCanvasAndPost(c);

为什么这是必要的?我真的需要更详细的解释。 :)

最佳答案

synchronized 表示一次只有一个线程可以执行该代码块。

在此示例中,如果没有synchronized块,则多个线程可以同时绘制图形,并且结果可能很困惑。因此,synchronized 确保一次只能绘制一个线程。
lockCanvas() 创建一个您将写入的表面区域。它被称为 lockCanvas() 的原因是因为在您调用 unlockCanvasAndPost() 之前,没有其他代码可以调用 lockCanvas() 并写入表面,直到您的代码完成。

一般来说,理解锁很重要,特别是在涉及多线程编程时。锁是一种同步原语,用于防止多个线程同时访问资源/代码。它得名是因为它的行为很像物理锁。一般一个线程可以获得锁,直到它释放锁,其他线程才能获得锁。使用锁的一个潜在问题是,误用它会导致“死锁”情况,即让线程等待锁,而它永远不会被释放。

关于android - lockCanvas是什么意思(详解),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3322144/

10-09 05:49