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 ツールキットにアクセスしないでください。

2 つの質問があります。

  1. 「 Android UIツールキット」の意味に戸惑います。キャンバスは SurfaceHolder によってロックされており、SurfaceHolder はユーザー入力 (タッチ イベントなど) を受け入れることができるサーフェスを保持しているため、キャンバスは「Android UI ツールキット」と見なされますか?
  2. それらのチュートリアルまたはコード サンプルは上記のルールに違反していますか? もしそうなら、なぜそのような違反が容認されるのですか? そうでない場合、なぜですか?
4

0 に答える 0