0

ここで問題があります。2 つの AsyncTasks を呼び出すと、最後の doinbackground が呼び出されません。これら 2 つの操作をメイン アクティビティ スレッドから呼び出す必要があります。

問題に光を当ててください..

ありがとう

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    .
    .
    .
    .
    .
    .
    new ClientListener(this).execute();
    new DatabaseReader(this).execute();
}
4

1 に答える 1

2

AsyncTask は、doInBackground() からのものを実行するためにスレッド プール パターンを使用します。この問題は、当初 (初期の Android OS バージョンでは) プール サイズが 1 であったため、多数の AsyncTask に対して並列計算が行われないことを意味していました。しかし、後で修正され、現在はサイズが 5 であるため、最大 5 つの AsyncTasks を同時に実行できます。残念ながら、どのバージョンでそれが変更されたか正確には覚えていません。

Googleドキュメントによると

最初に導入されたとき、AsyncTasks は単一のバックグラウンド スレッドでシリアルに実行されました。DONUT 以降、これはスレッドのプールに変更され、複数のタスクが並行して動作できるようになりました。HONEYCOMB の後、並列実行によって引き起こされる一般的なアプリケーション エラーを回避するために、これをシングル スレッドに戻す予定です。本当に並列実行が必要な場合は、このメソッドの executeOnExecutor(Executor, Params...) バージョンを THREAD_POOL_EXECUTOR で使用できます。ただし、その使用に関する警告については、解説を参照してください。

于 2012-06-23T13:45:46.893 に答える