使用ThreadPoolExecutor的AsyncHttpClient可以知道所有任务何时完成?

时间:2013-02-20 20:44:09

标签: android android-asynctask threadpoolexecutor

我正在使用AsyncHttpClient来获取一些JSON。我的方法将解析JSON并将触发另一个get请求,所以我实际上并不知道有多少线程正在运行。经过一些搜索,我想我可以使用ThreadPoolExecutor知道我的所有线程何时完成,所以我可以写入数据库。如果我使用AsyncHttpClient.get()

,遗嘱执行人将如何知道我提交了一份工作?
AsyncHttpClient client = new AsyncHttpClient();
int limit = 20;
BlockingQueue<Runnable> q = new ArrayBlockingQueue<Runnable>(limit);
ThreadPoolExecutor executor = 
                        new ThreadPoolExecutor(limit, limit, 20, TimeUnit.SECONDS, q);
client.setThreadPool(executor);
parseSilo(url, context); // this fires client.get() ... as it encounters urls in JSON feed
executor.shutdown();
while (!executor.awaitTermination(10, TimeUnit.SECONDS)) {
      Log.e(TAG, executor.getTaskCount() + " tasks left");
}

1 个答案:

答案 0 :(得分:0)

我看不到您将工作提交到ThreadPoolExecutor

的位置

示例代码:

executor.execute(new Runnabale() {
    public void run() {
       // your job code
    }
});

修改

我刚刚注意到你覆盖了ThreadPoolExecuter的默认AsyncHttpClient所以它会在发出请求时使用它(例如get),它应该在没有明确发送任何内容的情况下工作executor

您还可以覆盖方法terminated(),而不是循环,直到所有任务完成。