【发布时间】:2013-12-21 18:56:17
【问题描述】:
我一直在使用 Jsoup 下载和解析网页,以在列表中显示内容。这个过程需要一段时间,所以我实现了Callable 接口在另一个线程中执行任务并返回结果。 问题是在这个过程中它仍然会阻塞 UI。
public class GetListaNotizie implements Callable<ArrayList<Notizia>> {
static ArrayList<Notizia> getNotizieBySezione() {
[...] Long process
return notizie;
}
@Override
public ArrayList<Notizia> call() throws Exception {
return getNotizieBySezione();
}
}
然后:
final ExecutorService service;
final Future<ArrayList<Notizia>> task;
service = Executors.newFixedThreadPool(1);
task = service.submit(new GetListaNotizie());
try {
ArrayList<Notizia> notizie = task.get();
lvListaNotizie.setAdapter(new RiempiLista(activity, notizie));
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
我错过了什么?
【问题讨论】:
-
task.get()呼叫被阻塞。无论如何,您不需要使用 executors 和 futures 重新发明轮子。 Android 已经有一个AsyncTask类精确地 用于这些类型的任务。
标签: java android multithreading callable