【发布时间】:2014-01-14 20:54:27
【问题描述】:
我同时进行一些网络请求,并在 Android 中使用 HTTPClient 获取响应。我正在使用 threadsafeclientconnmanager 以获得线程安全连接。
为了同时进行,我使用 Java ThreadPool。
private enum STATE { state1, state2, state3 };
ExecutorService executor = Executors.newFixedThreadPool(nThreads);
并提交 3 个可运行文件:
executor.submit(new Processor(state1));
executor.submit(new Processor(state2));
executor.submit(new Processor(state3));
还有这个扩展可运行的处理器类:
class Processor implements Runnable {
private STATE state;
public Processor(STATE state) {
this.state = state;
}
@Override
public void run() {
switch (state) {
case state1:
// Do something
// Call Back to update UI
break;
case state2:
// Do something
// Call Back to update UI
break;
case state3:
// Do something
// Call Back to update UI
break;
}
latch.countDown();
}
}
正如您在 run 方法中看到的,对于每个状态,我都会执行一些指令,然后我需要 update UI using callBack methods。
因为这是 UI 线程,所以每个回调方法都应该是:
runOnUiThread(new Runnable() {
@Override
public void run() {
//Update UI
}
});
当我们在 Android 中拥有 Java 线程池时,是否有更好的解决方案来更新 UI?
【问题讨论】:
-
您在寻找什么样的“更好”?
-
我正在寻找基于 Android 主 UI 线程策略的 Android 解决方案。例如:Communicating with the UI Thread
-
AsyncTask 可能是您想要的,请参阅 Miguel 的回答。您可以在任何您想要的 Executor 上执行 AsyncTasks(您的固定 ThreadPool 或 AsyncTask.THREAD_POOL_EXECUTOR 可能是不错的选择),并将您的代码放在正确的方法中将使其在正确的线程上执行。
-
据我了解,there is a limitation for AsyncTask based on core pool size,我在使用Java线程池时不会有这个限制。
标签: java android multithreading threadpool