postInvalidate メソド

CLiCkin2DaBeaT をだらだら見てるんですが、面白いものを見つけたのでメモ。

GameView クラス

コンストラクタで Thread なオブジェクトを作って kickoff しております。

    Thread monitorThread = (new Thread(new Monitor()));
    monitorThread.setPriority(Thread.MIN_PRIORITY);
    monitorThread.start();

Monitor クラスは GameView.java の中で定義されてて以下。

  private class Monitor implements Runnable {
    public void run() {
      while (true) {
        try {
          Thread.sleep(INTERVAL);
        } catch (InterruptedException e) {
          // This should not be interrupted. If it is, just dump the stack
          // trace.
          e.printStackTrace();
        }
        updateTargets();
        postInvalidate();
      }
    }
  }

UI Thread とは別なスレッドなので Handler#post() で invalidate を呼び出している模様。これをトリガにして GameView#onDraw() が呼び出されるはず。

ただ

コンストラクタで kickoff されてるので C2B#resetGame() でオブジェクト生成された後は updateTargets が呼び出され続けてるはずなんですが、このあたりがどうなっているのか、はもう少し確認しないと微妙です。