Androidのinvalidate()
メソッドとpostInvalidate()
メソッドの違いは何ですか?それぞれがいつ呼び出されますか?メソッドは、View
を拡張するクラスでのみ呼び出す必要がありますか?
UIスレッドからビューを再描画する場合は、invalidate()
メソッドを呼び出すことができます。
UI以外のスレッドからビューを再描画する場合は、postInvalidate()
メソッドを呼び出すことができます。
View
クラスから派生した各クラスには、invalidateメソッドとpostInvalidate
メソッドがあります。 invalidateが呼び出されると、現在のビューが変更されたため、できるだけ早く再描画する必要があることをシステムに通知します。このメソッドはUIスレッドからのみ呼び出すことができるため、UIスレッドを使用しておらず、ビューが変更されたことをシステムに通知する場合は、別のメソッドが必要です。 postInvalidate
メソッドは非UIスレッドからシステムに通知し、ビューはUIスレッドの次のイベントループでできるだけ早く再描画されます。 SDKのドキュメントでも簡単に説明されています。
更新:
他のスレッドからpostInvalidateを使用すると(UIがすぐに更新されないなど)、いくつかの問題が発生します。これはより効率的です。
runOnUiThread(new Runnable() {
public void run() {
myImageView.setImageBitmap(image);
imageView.invalidate();
}
});