私のアプリ (Android 2.2 以降をサポート) では、多数 (約 700) の異なる Web ページの HTML コードをチェックし、各 Web ページから 1 つの名前を取得する必要があります。すべての URL を配列に格納しています。
単一の Asynctask を使用し、次のような URL で配列を反復処理します。
(Asynctask の doinbackground からの抜粋)
publishProgress(urls.size());
int a = 0;
for(String code : urls) {
if(!running) return null;
try {
URL url = new URL(code);
HttpURLConnection con = (HttpURLConnection) url.openConnection();
naam_codes.put(readStream(con.getInputStream(), true).get(0), code);
} catch (Exception e) {
running = false;
}
publishProgress(++a);
および readstream は次のとおりです。
BufferedReader reader = null;
ArrayList<String> html = new ArrayList<String>();
try {
reader = new BufferedReader(new InputStreamReader(in, Charset.forName("ISO-8859-1")));
if (snel){
//reading, matching and stuff
}
else {
//other reading, matching and stuff
}
}
} catch (IOException e) {
//pass
} finally {
if (reader != null) {
try {
reader.close();
} catch (IOException e) {
return null;
}
}
}
return html;
今私の問題は、新しいダウンロードを開始する前に、1 つのダウンロードとマッチングが完了するのを待たなければならないことです。これを高速化できるはずですよね?少し監視した後、プロセスは CPU やインターネット帯域幅 (?) を完全には使用していないようです。1 つの Asynctask 内で反復する代わりに、UI スレッドで反復して複数の Asynctask を実行する必要がありますか? もしそうなら、どのように?