针对我的应用程序(支持Android 2.2+),我必须检查大量(约700个)不同网页的HTML代码,并从每个网页中检索单个名称。我已经将所有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;
现在我的问题是必须等待一个下载和匹配完成后才能开始下一个。这应该可以加速,不是吗?在监控一段时间后,此过程似乎未充分利用CPU或网络带宽(?)。那我是否应该在单个Asynctask内迭代,还是在UI线程上进行迭代并执行多个Asynctasks?如果是后者,应该如何操作?