Androidのinvalidate()
とpostInvalidate()
の違いは何ですか?それぞれはいつ呼び出されるのですか?メソッドはView
まで拡張されたクラスでのみ呼び出される必要がありますか?Androidのinvalidate()メソッドとpostInvalidate()メソッドの違いは何ですか?
19
A
答えて
33
UI Thread
から図面を再描画する場合は、invalidate()
メソッドに呼び出すことができます。
Non UI Thread
からビューを描画する場合は、postInvalidate()
メソッドを呼び出すことができます。
Viewクラスから派生した各クラスには、invalidateメソッドとpostInvalidateメソッドがあります。 invalidateが呼び出されると、現在のビューが変更されたことをシステムに通知し、できるだけ早く再描画する必要があります。このメソッドはあなたのUIThreadからしか呼び出せないので、あなたがUIThreadにいなくても、あなたのViewが変更されたことをシステムに通知したいときは、別のメソッドが必要です。 postInvalidateメソッドはUIThread以外のシステムからシステムに通知し、UIThread上の次のイベントループではできるだけ早く再描画されます。また、まもなくSDKドキュメントで説明されています。
UPDATE:
(のようなUI更新右離れを持っていない)、この他のスレッドからpostInvalidateを使用して生じるいくつかの問題があります。
runOnUiThread(new Runnable() {
public void run() {
myImageView.setImageBitmap(image);
imageView.invalidate();
}
});
関連する問題
- 1. MiniTestのassert_in_deltaメソッドとassert_in_epsilonメソッドの違いは何ですか?
- 2. FirebaseのaddListenerForSingleValueEventメソッドとaddChildEventListenerメソッドの違いは何ですか?
- 3. Rubyのputメソッドとwriteメソッドの違いは何ですか?
- 4. LinkedListクラスのelement()メソッドとgetFirst()メソッドの違いは何ですか?
- 5. WaitCallbackメソッドと単純メソッドのThreadPoolの違いは何ですか
- 6. Objective Cのメソッドと+メソッドの違いは何ですか?
- 7. Kerasモデルのpredictメソッドとpredict_on_batchメソッドの違いは何ですか?
- 8. browser.sleep()メソッドとbrowser.wait()メソッドの違いは何ですか?
- 9. static structメソッドとstatic classメソッドの違いは何ですか?
- 10. AWS.S3.ManagedUpload()メソッドとs3.upload()メソッドの違いは何ですか?
- 11. 動的メソッドと仮想メソッドの違いは何ですか?
- 12. Android:TextViewがinvalidate()またはpostInvalidate()で更新されない
- 13. の違いは何だ - メソッド
- 14. PlayN Graphicsインターフェイスでは、heightメソッドとscreenHeightメソッドの違いは何ですか?
- 15. OWINのoAuthでValidateClientAuthenticationメソッドとGrantResourceOwnerCredentialsメソッドの違いは何ですか?
- 16. JavaのURLクラスのgetHostメソッドとgetAuthorityメソッドの違いは何ですか?
- 17. FirebaseクラウドストレージのStorageReferenceのputFile()メソッドとputStream()メソッドの違いは何ですか?
- 18. SwiftのArrayのremoveLast()メソッドとpopLast()メソッドの違いは何ですか?
- 19. Spring Batch JobExecutionクラスのgetAllFailureExceptions()メソッドとgetFailureExceptions()メソッドの違いは何ですか?
- 20. C#のQueryable.ContainsメソッドとList <T> .Containsメソッドの違いは何ですか?
- 21. Pythonの文字列メソッドとstrメソッドの違いは何ですか?
- 22. アプリ内課金のgetBuyIntent()メソッドとlaunchPurchaseFlow()メソッドの違いは何ですか?
- 23. アンドロイドのローカルとグローバルのRectメソッドの違いは何ですか?
- 24. Android用Google App IndexingのsetIdメソッドとgetUrlメソッドの違いは?
- 25. ArrayList.get(int index)メソッドとArrayAdapter.getItem(int position)メソッドの違いは何ですか?
- 26. 継承されたメソッド(プロトタイプ)と静的メソッド(式)の違いは何ですか?
- 27. jTextArea.setText()メソッドとjTextArea.append()メソッドの基本的な違いは何ですか?
- 28. mongo DBのupdateManyメソッドとの違いは何ですか?
- 29. asyncDataとnuxt jsのメソッドの違いは何ですか?
- 30. onMeasure()メソッドのビューとビューグループの違いは何ですか?
は、postInvalidate()とまったく同じではありませんか? – rupps
アンドロイドのサンプルコード:http://developer.android.com/training/custom-views/index.htmlには、内部にプロパティゲッタとセッタを持つPieChart.javaがあります。ほとんどのプロパティ設定ツールはinvalidate();を呼び出します。 PieChart.javaはUIスレッドではありません。どうしてそこから無効化を呼び出すことができますか? (主なスレッドである主なアクティビティーjavaファイルがあります)。私はpostinvalidate()の呼び出しを期待していました。彼らはPieChart.javaのonDrawメソッドの下でそれをやったのと同じように。 – Simon
@Simon私はコードを見ていませんが、PieChart.javaは、スレッドを拡張したり別のスレッドを別の方法で使用するよう指定していない限り、UIスレッドでは動作します。起こりそうなことは、円グラフが描画されていることです。円グラフの 'onDraw'内で' postInvalidate() 'が呼び出され、UIスレッドのビューに円グラフを描画します。 –