私のアプリケーションでは、2 つの異なる URL からいくつかのデータをダウンロードし、リストに入力する必要があります。そのために、2 つの AsyncTask クラスを 1 つ作成します。最初のクラスは、対応する URL からデータをダウンロードする役割を果たします。もう 1 つは、前述の asyncTasks を実行し、その後 UI スレッドにリストを設定する役割を果たします。データをダウンロードするタスクを並行して実行する必要があるため、executor で実行します。私の問題は、リストの作成を担当するタスクが、他の 2 つのタスクがデータをダウンロードする前に終了することです。そのスレッドを他の 2 つが戻るまで待機させるにはどうすればよいですか。並行して実行する必要があるため、他のものでは .get を使用する必要があります。明確にするために、いくつかのコードも投稿しています。
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
readJsonTask task = new readJsonTask(this);
task.execute();
}
private class readJsonTask extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... args) {
downloadUrl task = new downloadUrl(url1,"jsonData1","/sdcard/appData/LocalJson/jsonData1");
task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
downloadUrl task1 = new downloadUrl(url2,"jsonData2","/sdcard/appData/LocalJson/jsonData2");
task1.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
return "done";
}
@Override
protected void onPostExecute(String result) {
//update UI
}
}
private class downloadUrl extends AsyncTask<String, Void, String> {
private String url;
private String targetFolder;
private String pathForLoad;
@Override
protected String doInBackground(String... args) {
//download Data
return "done";
}
@Override
protected void onPostExecute(String result) {
}
}