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