4

UIスレッドからasyctaskを開始して実行する必要がありますか?非UIスレッドからのWebサービスアクセス(長時間実行)にasynctaskを使用する場合は正しいですか? 私のクエリが間違っていたらごめんなさい。

私のアプリでは、約10個のWebサービスを実行する必要があり、UIに結果を表示する必要があります。どのアプローチが適切なasynctask、intentserviceになるか、各Webサービス呼び出しのスレッドを作成して並列実行するか混乱しています。

4

3 に答える 3

2

AsyncTask が正しく機能するためには、いくつかのスレッド化規則に従う必要があります。

  1. AsyncTask クラスを UI スレッドにロードする必要があります。これは、JELLY_BEAN の時点で自動的に行われます。

  2. タスク インスタンスは、UI スレッドで作成する必要があります。

  3. execute(Params...) は UI スレッドで呼び出す必要があります。

  4. onPreExecute()、onPostExecute(Result)、doInBackground(Params...)、onProgressUpdate(Progress...) を手動で呼び出さないでください。

  5. タスクは 1 回だけ実行できます (2 回目の実行を試みると、例外がスローされます)。

    詳細

私の個人的な意見では、AsyncTask を使用することをお勧めします。これは、バックグラウンド タスクの実行に高度に最適化されており、マルチコア プロセッサなどの利点を活用できるためです。

于 2013-01-23T19:00:09.513 に答える
0

はい、UI スレッドから asynctask を実行する必要があります。

複数のスレッド/ランナブルを使用することをお勧めします。また、スレッドからの応答をリッスンするために、メイン アクティビティ クラスにハンドラーを実装する必要があります。

于 2013-01-23T18:58:49.580 に答える
0

thread または asynctask のいずれかを使用できます。AsyncTask は、バックグラウンド タスクを開始する前、およびバックグラウンド タスクを終了した後、またはその進行状況を取得した後に、Ui 変更メソッドを管理するメソッドを提供します。

アーキテクチャの要件によって異なります。

于 2013-01-23T19:01:09.880 に答える