对于我的应用程序(支持 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 或互联网带宽(?)。我是否应该在 UI 线程上迭代并执行多个 Asynctask,而不是在一个 Asynctask 中进行迭代?如果是这样,怎么做?