1

如果 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;
} 

 }
4

2 回答 2

1

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

于 2013-09-13T07:18:54.793 回答
0

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

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

不需要OtherObject2实现Callable,Runnable就够了。通过 schedule() 提交 OtherObject2 没有用,execute() 就可以了。

于 2013-09-13T08:10:15.383 回答