web-dev-qa-db-ja.com

postInvalidate()は何をしますか?

AndroidでのpostInvalidate()関数の使用は何ですか?私は多くの場所でこの機能を見てきました。私がグーグルで検索したとき、私はこれだけで出てきました:

postInvalidate-- Iスレッドで無効化リクエストを送信

「リクエストの無効化」というフレーズの意味がわかりません。誰かがここで何が起こっているのか詳細に説明できますか?

61
rogerstone

Viewクラスから派生した各クラスには、invalidateおよびpostInvalidateメソッドがあります。 invalidateが呼び出されると、現在のビューが変更されたことをシステムに通知し、できるだけ早く再描画する必要があります。このメソッドはUIThreadからのみ呼び出すことができるため、UIThreadにいないときにビューが変更されたことをシステムに通知する場合は別のメソッドが必要です。 postInvalidateメソッドは、非UIThreadからシステムに通知し、UIThreadの次のイベントループでビューをできるだけ早く再描画します。また、SDKドキュメントでは 簡潔に説明 です。

invalidatepostInvalidateを比較するだけです。

125
MarioB.

このメソッド(postInvalidate())により、非UIスレッドからのViewを無効にできます。 UIスレッドからViewを無効にするには、invalidate()メソッドを使用します。

無効化とは、View.onDraw(Canvas)メソッドが将来のある時点で(すぐではなく)View全体を再描画するために呼び出すことを意味します(Viewが表示されている場合)。

AndroidはViewsを自動的に再描画しますが、「このViewが変更されました。できるだけ早く再描画してください」と伝える必要がある場合があります。

詳細:

http://developer.Android.com/guide/topics/ui/how-Android-draws.html

http://developer.Android.com/reference/Android/view/View.html#invalidate%28%29

21
branoholy

簡単に言うと、invalidate()メソッドはUIスレッドから呼び出され、postInvalidate()は非UIスレッドから呼び出されて、Androidいくつかの変更が加えられた後のカスタムビュー。

2
Rahul Yadav