2

私はアンドロイドで非常に新しいです。Android開発者のWebサイトで、Androidスレッドに関する2つのルールを見ました:

1 : Do not block the UI thread
2 : Do not access the Android UI toolkit from outside the UI thread

Android SDK の LunarLander Sample を見ると、次のコードが表示されます。

class LunarView extends SurfaceView implements SurfaceHolder.Callback {

//...

public LunarView(Context context, AttributeSet attrs) {

      class LunarThread extends Thread {

         //...

         private void doDraw(Canvas canvas) {
                //do some drawing on the canvas
         }
      }

      //...

    public LunarView(Context context, AttributeSet attrs) {
        super(context, attrs);

        // ...

        // create thread only; it's started in surfaceCreated()
        thread = new LunarThread(holder, context, new Handler() {
            @Override
            public void handleMessage(Message m) {
                mStatusText.setVisibility(m.getData().getInt("viz"));
                mStatusText.setText(m.getData().getString("text"));
            }
        });

        //...

     }


     //...

  }

ご覧のとおり、ビューをレンダリングする新しいスレッドを作成しています。

このコードが Android フレームワークのスレッド化の 2 番目の規則に違反していないのはなぜですか?

読んでくれてありがとう。

4

2 に答える 2