1

ドキュメントによると、別のスレッドから UI スレッドにアクセスするには、3 つのオプションのいずれかを使用する必要があります。オプションは次のとおりです。

  1. Activity.runOnUiThread(実行可能)
  2. View.post(実行可能)
  3. View.postDelayed(実行可能、長い)

いつどれを使用する必要がありますか? それらはすべて、Runnable を UI スレッドのメッセージ キューに追加するようです。

postDelayed は、Runnable を後でスケジュールしたい場合にのみ本当に役立つと思いますが、UI スレッドでも Runnable を実行するため、言及しただけです。

さらに混乱させるために、AsyncTask もあります。いつそれを使うべきですか?

4

5 に答える 5

1

コンテキストを必要とせずにどこからでも利用できるUIスレッドに戻るためのメカニズムが必要な場合は、次を使用できます。

Handler handler = new Handler(Looper.getMainLooper());
handler.post(Runnable);
于 2013-02-06T22:42:00.197 に答える
1

runOnUiThreadView.postはまったく同じで、どちらも実行可能なオブジェクトをアクティビティのHandlerに送信します。好きな方を使ってください。

AsynchTaskに関しては、UI スレッドでの実行には使用されません。OnPostExcuteただし、Asynch タスクが動作を終了すると、UI スレッドで呼び出されるメソッドが呼び出されます。

このテーマに関する非常に優れたチュートリアルがありますここ

于 2013-02-06T22:31:27.483 に答える
0

忘れてくださいAsyncTask。これは、UIスレッドでコードを実行するためのものではなく、UIスレッドAsyncTask から開始するバックグラウンドスレッドでコードを実行するためのものです。

その他のオプションについては、お気軽にご選択ください。オブジェクトを扱っている場合Viewは、すでにUIスレッドを使用している可能性があります。したがって、Activity他のスレッドからのコンテキストへの参照を保持し、 runOnUiThreadを呼び出す方が適切です。

于 2013-02-06T22:35:04.350 に答える
0

AsyncTasksを使用することをお勧めします。AsyncTasksは他のtheadでハードワークを実行し(doInBackground())、UI theadと同期して作業結果をプッシュするように設計されています(onPostExecute())。もちろん、作業の進行状況に応じてUIを定期的に更新できます。 (onProgressUpdate())。

HONEYCOMBより大きいAndroidバージョンで複数のAsyncTaskを同時に実行したい場合は、私の小さな潤滑油を使用できます:Android-AsyncTask-Executor

于 2013-02-06T22:36:22.570 に答える
0

私は常に runOnUiThread を選択します。同じ UI スレッドで何かを実行するには、それが最善の方法だと思います。AsyncTasks はトリッキーです。これは良い考えですが、何か新しいものを使用したい場合は、ローダーまたは IntentService を使用してください。

于 2013-02-06T22:26:38.297 に答える