ScheduledThreadPoolExecutor Callable()阻止我的主Activity UI线程

时间:2013-09-13 06:52:27

标签: java android multithreading concurrency

如果Callable()ScheduledThreadPoolExecutor应该在像Runnable()这样的后台线程中运行那么为什么它会阻塞我的UI线程呢?

我认为应该在像Runnable这样的后台线程中运行。

 ScheduledThreadPoolExecutor stpe;

在onCreate内部

  ScheduledFuture<Integer> sf = stpe.schedule(new OtherObject2(), 5, TimeUnit.SECONDS);

  try {
    int returnedInteger = sf.get();
    textViewThree.setText("the returned integer is: " + returnedInteger);
} catch (Exception e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}

嵌套内部类

 public class OtherObject2 implements Callable<Integer> {

@Override
public Integer call() throws Exception {

    Integer integerReturn = 23;

    return integerReturn;
} 

 }

2 个答案:

答案 0 :(得分:1)

以下行int returnedInteger = sf.get();阻止等待结果。

答案 1 :(得分:0)

而不是OtherObject2中的return integerReturn,运行一个特殊的UI任务:

final Integer integerReturn = 23;
runOnUiThread(new Runnable() {
    public void run() {
       textViewThree.setText("the returned integer is: " + integerReturn);
    }
});

不需要OtherObject2来实现Callable,Runnable就足够了。不使用schedule()提交OtherObject2,execute()就可以了。