Androidでインタフェースをリフレッシュする2つの方法

1686 ワード

Handlerによるインタフェースのリフレッシュ
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();
            }
  }
 }
}


postInvalidate()を使用してインタフェースをリフレッシュする
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();   }  } }