我一直在 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/