web-dev-qa-db-ja.com

Androidのinvalidate()メソッドとpostInvalidate()メソッドの違いは何ですか?

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

22
user918197

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();
    }
});
38
Dharmendra