4

私は地元のシネマテックのファンアプリを書いています。これは、今後数日間の上映カレンダーを表示します。1日あたりの映画リストは、サイトからのパラメーター化されたHTTP呼び出しを使用して取得されます(回答にはヘブライ語が含まれているため、リンクをクリックしてジブリッシュを取得した場合は、おそらく問題ありません)。

アプリは次の8日間のスケジュールを表示するため、1日あたりのスケジュールリクエストで8回の呼び出しを行います。

private class GetMoviesTask extends AsyncTask<Integer, Void, List<Film>>

doInBackground()1日あたりの映画のリストを取得しonPostExecute()、インターフェイスを更新します。

AsyncTaskは以下から呼び出されMainActivity.onCreate()ます:

for (int i=0; i<NUMBER_OF_DAYS_TO_VIEW; i++){
    new GetMoviesTask().execute(i);
}

問題は、AsyncTaskが同時に実行されないことです。日は次々とゆっくりとロードされますが、それは痛々しいほど遅いです:

ここに画像の説明を入力してください

ここに画像の説明を入力してください

ここに画像の説明を入力してください

これらのAsyncCallを同時に開始するための最良の方法は何ですか?

4

2 に答える 2

12

AsyncTaskAndroid 4.xでリグレッションが発生することが知られています。この場合、システムは、Android 1.6以降のように同時に実行するのではなく、一度に1つずつ実行します。executeOnExecutor()これは仕様によるものです。基本的に、新しいプラットフォームでは、の代わりにを呼び出すことで、古い同時動作に戻すことができますexecute()。Mark Murphy(StackOverflowではCommonswareとして知られています)は、彼のブログですべての詳細を並べ替えています。

于 2012-11-11T08:51:41.917 に答える
0

基本的に、AsyncTask はバックグラウンドで実行されるスレッドを 1 つだけ作成します。

2 つの方法で目的を達成できます。

  • まず、操作ごとに個別の AsyncTasks を作成できます。
  • 次に、doInBackground メソッドで複数のスレッドを作成し、同時リクエストとプロセスを作成します。その後、それらを onProgressUpdate または onPostExecute に公開することで、UI に通知できます。

これをチェックして

スレッド化されたアンドロイド非同期タスク

于 2012-11-11T08:12:37.093 に答える