コントロール更新InvalidateとpostInvalidateの違い
http://shazhuzhu1.iteye.com/blog/971193
Androidでviewの更新を実現するには2つの方法があり、1つはinvalidateであり、もう1つはpostInvalidateであり、前者はUIスレッド自身で使用され、後者は非UIスレッドで使用される.
AndroidはInvalidate方法を提供してインタフェースリフレッシュを実現していますが、Invalidateは直接スレッド内で呼び出すことができません.彼はシングルスレッドモデルに違反しています.Android UIはスレッドセキュリティではなく、UIスレッド内で起動しなければなりません.
Androidプログラムで使用できるインタフェース更新方法は、HandlerとpostInvalidate()を利用して、現在のスレッドの中でインタフェースを更新する方法の2つがあります.
1,invalidate()を利用して画面を更新する
Handlerオブジェクトを実装し、Handler Messageメソッドを書き換え、invalidate()を呼び出してインターフェースリフレッシュを実現します.スレッド内でインターフェース更新メッセージをsendMessageで送信します.
PostInvalidateを使うのは簡単です.handlerはいらないです.直接スレッドの中でpostInvalidateを呼び出すだけでいいです.
Androidでviewの更新を実現するには2つの方法があり、1つはinvalidateであり、もう1つはpostInvalidateであり、前者はUIスレッド自身で使用され、後者は非UIスレッドで使用される.
AndroidはInvalidate方法を提供してインタフェースリフレッシュを実現していますが、Invalidateは直接スレッド内で呼び出すことができません.彼はシングルスレッドモデルに違反しています.Android UIはスレッドセキュリティではなく、UIスレッド内で起動しなければなりません.
Androidプログラムで使用できるインタフェース更新方法は、HandlerとpostInvalidate()を利用して、現在のスレッドの中でインタフェースを更新する方法の2つがあります.
1,invalidate()を利用して画面を更新する
Handlerオブジェクトを実装し、Handler Messageメソッドを書き換え、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()を使って画面を更新します.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();
}
}
}