1

2 つの非同期タスクを開始したいのですが、最初のタスクが完了するまで 2 番目のタスクは開始されません。

私がググったことから、人々は通常このアプローチを提案します:

new MyAsyncTask().execute(params);
new MyAsyncTask().execute(params);

ただし、それらを個別にインスタンス化し、タスクのハンドルも保持する必要があります (たとえば、メッセージを渡すため)。したがって、私はこれを行う:

onStart() 
{
  taskA = new MyAsyncTask(paramsA);
  taskB = new MyAsyncTask(paramsB);
}

onButtonPress()
{
  taskA.execute();
  taskB.execute();
}

編集: taskB は、taskA が完了するまで実際に実行を開始しないことに気付きました (tcp/ip サーバーを実行するため、時間がかかります)。理由がわかりません。ご意見やご感想はありますか?

4

1 に答える 1

2

簡単に言えば、Android のバージョンによっては、すべてのAsyncTaskサブクラスが同じスレッドを使用している可能性があるため、一度に 1 つのみしか実行できないということです。これには 2 つの方法があります。

  1. Runnableの代わりに使用AsyncTask
  2. executeへの 1 つの呼び出しを次のように置き換えますexecuteOnExecutor(Executor.THREAD_POOL_EXECUTOR, params)

明らかに、最初に #2 を試してください。コードの変更はそれほど多くありません。しかし、それがすぐにうまくいかない場合は、#1 に切り替えます。その場合、Android が将来どのように変更されるかを心配する必要はありません。

のスレッド モデルの詳細についてはAsyncTaskAndroid ドキュメント エントリを参照してください。

于 2012-10-14T02:23:16.050 に答える