【发布时间】:2012-10-20 22:01:49
【问题描述】:
对于我的应用程序(支持 Android 2.2+),我必须检查很多(大约 700 个)不同网页的 HTML 代码,并从每个网页中检索一个名称。我将所有 URL 存储在一个数组中。
我现在使用单个 Asynctask 并使用如下 URL 遍历数组:
(来自 Asynctask 的 doinbackground 的 sn-p)
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 中进行迭代?如果有,怎么做?
【问题讨论】:
-
您是否急于处理这些数据?例如,Google Play 不提供多次下载,而目前,Google Play 一次下载一个应用程序。
-
用另一种方法查看我编辑的答案
标签: android multithreading android-asynctask