102

Activity.runOnUiThreadとの違いは何View.postですか? 誰か説明してくれませんか?

4

4 に答える 4

109

View.postアクティビティに直接アクセスできない場合に が役立つことを除いて、実質的な違いはありません。

どちらの場合も、UI スレッドでない場合は、Handler#post(Runnable)バックグラウンドで呼び出されます。

CommonsWare がコメントで述べたように、この 2 つには違いがあります。Ui スレッドでActivity#runOnUiThread呼び出されると、runメソッドが直接呼び出されますが、キューView#postにポストされます (例: を呼び出します) 。runnableHandler#post

IMO の重要な点は、どちらも同じ目標を持っており、それを使用する人に違いはないということです(そして、実装は将来変更される可能性があります)。

于 2012-05-11T20:31:59.857 に答える
23

Activity.runOnUiThread と view.post() のもう 1 つの違いは、ビューがウィンドウにアタッチされた後に、view.post() の runnable が呼び出されることです。

于 2014-03-28T11:19:44.870 に答える
17

どちらもほとんどの状況で受け入れられ、ほとんどの場合交換可能ですが、微妙に異なります。もちろん、最大の違いは、1 つは から、もう 1 つは から利用できることActivityですView。それらの間には多くの重複がありActivityますが、 では にアクセスできない場合もあれば、Viewでは にアクセスできない場合もありViewますActivity

私が遭遇したエッジケースの 1 つは、別のSO質問に対する回答View.postで言及しました。これが問題になることはめったにありませんが、特にのメソッドを呼び出す場合は、 が実行されないことがあります。代替手段は、which is whatを使用し、とにかくカバーの下で使用することです。View.postView.postViewRunnableView.postonCreateActivityHandler.postActivity.runOnUiThreadView.post

(正確にするために編集し、「別のスレッドから」を追加)

于 2012-05-11T20:58:52.517 に答える