0

在在线教程或2D游戏的Android SDK示例中,游戏线程的run()方法中通常有一个绘图函数,负责在画布上绘图。例如,在经典的月球着陆器代码中,我们在 class 中有以下代码LunarThread

@Override
public void run() {
    while (mRun) {
        Canvas c = null;
        try {
            c = mSurfaceHolder.lockCanvas(null);
            synchronized (mSurfaceHolder) {
                if (mMode == STATE_RUNNING) updatePhysics();
                doDraw(c);
            }
        } finally {
            // ...
        }
    }
}

private void doDraw(Canvas canvas) {
    canvas.drawBitmap(mBackgroundImage, 0, 0, null);
    // ...
}

然而,Android 开发指南非常明确地指出:

不要从 UI 线程外部访问 Android UI 工具包。

我有两个问题。

  1. 我对' Android UI toolkit '的含义感到困惑。由于画布被 SurfaceHolder 锁定,并且 SurfaceHolder 持有一个可以接受用户输入(例如触摸事件)的表面,因此画布是否被视为“Android UI 工具包”?
  2. 那些教程或代码示例是否违反了上述规则?如果是这样,为什么这种违规行为是可以接受的?如果不是,为什么不呢?
4

0 回答 0