Activity.runOnUiThread
との違いは何View.post
ですか? 誰か説明してくれませんか?
4 に答える
View.post
アクティビティに直接アクセスできない場合に が役立つことを除いて、実質的な違いはありません。
どちらの場合も、UI スレッドでない場合は、Handler#post(Runnable)
バックグラウンドで呼び出されます。
CommonsWare がコメントで述べたように、この 2 つには違いがあります。Ui スレッドでActivity#runOnUiThread
呼び出されると、run
メソッドが直接呼び出されますが、キューView#post
にポストされます (例: を呼び出します) 。runnable
Handler#post
IMO の重要な点は、どちらも同じ目標を持っており、それを使用する人に違いはないということです(そして、実装は将来変更される可能性があります)。
Activity.runOnUiThread と view.post() のもう 1 つの違いは、ビューがウィンドウにアタッチされた後に、view.post() の runnable が呼び出されることです。
どちらもほとんどの状況で受け入れられ、ほとんどの場合交換可能ですが、微妙に異なります。もちろん、最大の違いは、1 つは から、もう 1 つは から利用できることActivity
ですView
。それらの間には多くの重複がありActivity
ますが、 では にアクセスできない場合もあれば、View
では にアクセスできない場合もありView
ますActivity
。
私が遭遇したエッジケースの 1 つは、別のSOの質問に対する回答View.post
で言及しました。これが問題になることはめったにありませんが、特にのメソッドを呼び出す場合は、 が実行されないことがあります。代替手段は、which is whatを使用し、とにかくカバーの下で使用することです。View.post
View.post
View
Runnable
View.post
onCreate
Activity
Handler.post
Activity.runOnUiThread
View.post
(正確にするために編集し、「別のスレッドから」を追加)