Android画面の更新


AndroidのinvalidateとpostInvalidateはいずれもインタフェースをリフレッシュするためのもので、使い方の違いは以下の通りです.
1)invalidate():Handlerオブジェクトをインスタンス化し、handleMessageメソッドを書き換えてinvalidate()を呼び出してインタフェースのリフレッシュを実現する.一方,スレッドではsendMessageを介してインタフェース更新メッセージを送信する. 
//  onCreate()     
new Thread(new GameThread()).start();

//      handler
Handler myHandler = new Handler() {
  //         
  public void handleMessage(Message msg) {
    switch (msg.what) {
      case Activity01.REFRESH:
        mGameView.invalidate(); //     
        break;
    }

    super.handleMessage(msg);
  }
};

class GameThread implements Runnable {
  public void run() {
    while (!Thread.currentThread().isInterrupted()) {
      Message message = new Message();
      message.what = Activity01.REFRESH;
      //     
      Activity01.this.myHandler.sendMessage(message);
      try {
        Thread.sleep(100);
      } catch (InterruptedException e) {
        Thread.currentThread().interrupt();
      }
    }
  }
}

2)postInvalidateを使用すると比較的簡単でhandlerを必要とせず,直接スレッドでpostInvalidateを呼び出せばよい.
class GameThread implements Runnable {
  public void run() {
    while (!Thread.currentThread().isInterrupted()) {
      try {
        Thread.sleep(100);
      } catch (InterruptedException e) {
        Thread.currentThread().interrupt();
      }

      //   postInvalidate            
      mGameView.postInvalidate();
    }
  }
}

3もう1つはカスタマイズされたLinearLayoutで、多くのパラメータを転送する必要があります.初期化の使用で初期表示値が転送され、中間に様々な変更が必要になる可能性があります.このとき、このカスタマイズされたレイアウトにインタフェースを書いてリスニングします.