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 が呼び出され続けてるはずなんですが、このあたりがどうなっているのか、はもう少し確認しないと微妙です。