lockCanvas是什么意思(精心设计)

Cur*_*ain 6 android android-canvas

我一直在Android中绘制图形.那里有很多示例应用程序,但我总能看到的一件事是lockCanvas.有人可以解释得更近,因为我真的没有得到它,也因为我认为理解未来的编程很重要吗?

一个例子:

try { 
    c = panel_thread.getHolder().lockCanvas(null);
    synchronized (panel_thread.getHolder()) {
        panel_thread.update();
        panel_thread.onDraw(c);
    }
}
Run Code Online (Sandbox Code Playgroud)

这就是我现在所拥有的.我该怎么解释这个?同步做什么?为什么将canvas-object分配到getHolder和lockCanvas很重要?

这部分也令人困惑:

panel_thread.getHolder().unlockCanvasAndPost(c);
Run Code Online (Sandbox Code Playgroud)

为什么这有必要?我真的需要一个更细致的解释.:)

Ala*_*lan 12

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

在这个例子中,没有synchronized块,多个线程可以同时绘制图形,结果可能很混乱.因此,synchronized确保一次只能绘制一个线程.

lockCanvas()创建一个您要写入的表面区域.它被调用的原因lockCanvas()是因为在你调用之前unlockCanvasAndPost()没有其他代码可以调用lockCanvas()并写入表面,直到你的代码完成.

通常,锁是很重要的,特别是当涉及多线程编程时.锁是一种同步原语,用于防止多个线程同时访问资源/代码.得到它的名字,因为它的行为很像物理锁.通常一个线程可以获得一个锁,直到它释放锁,没有其他线程可以获得锁.使用锁定的一个潜在问题是滥用它会导致"死锁"情况,其中线程等待锁定,并且它永远不会被释放.