23

invalidate()AndroidとpostInvalidate()メソッドの違いは何ですか?それぞれがいつ呼び出されますか?メソッドは、拡張するクラスでのみ呼び出す必要がありますViewか?

4

1 に答える 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 に答える