android中使用ExecutorService的时候执行耗时操作为什么会阻塞UI线程?


在android中使用ExecutorService类:

   
  Future<Boolean> future = executorService
  
.submit(new Callable<Boolean>() {
@Override
public Boolean call() throws Exception {
Thread.sleep(3000);//执行这个操作的时候会明显发现UI线程被阻塞了
return true;
}
});

try {
if (future.get()) {

}
} catch (Exception e) {
e.printStackTrace();
executorService.shutdown();
}

难道这个线程池所提供的线程是跑在UI线程的?但是打印出来的Thread.name并不是主线程,但是为什么在这里面执行耗时操作也会阻塞UI线程呢?

Android androidanr

viilz 10 years, 8 months ago

问题不是ExecutorService执行时阻塞UI线程,而是你在这里用了future.get(),它可能会阻塞线程。建议你了解一下Feture模式。

地球好不好玩 answered 10 years, 8 months ago

Your Answer