所有使用 SurfaceView 的示例似乎都使用了执行繁忙循环的 run 方法。这是一种有效的方法吗?我能看到的所有代码都遵循月球着陆器示例中的这个范例。但是,创建繁忙的 while 循环似乎是编写多线程应用程序的一种奇怪方式。绘图代码不应该等待绘图命令队列或类似的东西。我会以这种方式实现它,但是我看到的代码量如下所示,这让我提出了一个问题……在 SurfaceView 上绘制线程的最佳语义是什么。
public void run() {
while (mRun) {
Canvas c = null;
try {
c = mSurfaceHolder.lockCanvas(null);
synchronized (mSurfaceHolder) {
// DO DRAWING HERE
}
} finally {
if (c != null) {
mSurfaceHolder.unlockCanvasAndPost(c);
}
}
}
}