futuretask java_java – FutureTask提交给执行者不运行

我编写了一个类,其中一系列实例旨在从AsyncTask调用,它将返回runReport()方法的结果.它创建一个工作线程就好了,但由于某种原因,它不会执行Callable的call()方法.我究竟做错了什么?

//Problem: doStuff() never gets called, even though the worker thread gets created.

@Override

public ReportResult runReport() throws InterruptedException, ExecutionException {

Callable report = new Callable() {

@Override

public ReportResult call() throws Exception {

doStuff();

...

return new ReportResult(varWrittenByMethod);

}

};

FutureTask result = new FutureTask(report);

//I tried a few of these ExecutorService factory methods, with the same result.

//I only made my own ThreadFactory to verify the worker was created

ExecutorService es = Executors.newSingleThreadExecutor(new ThreadFact());

es.submit(report);

ReportResult finalResult = result.get();

es.shutdownNow();

return finalResult;

}

private class ThreadFact implements ThreadFactory{

@Override

public Thread newThread(Runnable r) {

Log.d(TAG, "Created worker Thread");

return new Thread(r);

}

}

据我所知,我必须在它自己的Thread中作为FutureTask执行此操作,因为它需要执行以下操作(除了返回之外的所有内容都在doStuff()中):

>做一些重要的同步设置(AsyncTask保持关闭UI线程)

>调用Looper.prepare()

>注册一个听众

>调用Looper.loop(),在一段时间内从侦听器中捕获一些回调.

>当我有足够的数据点时,在侦听器回调中调用Looper.myLooper().quit()

>返回结果

我愿意接受更好的方法来做到这一点.我最初让AsyncTask进行此调用,然后在其线程上运行Looper.loop(),但我无法处理这些对象的队列,因为我需要在返回结果之前从侦听器调用Looper.myLooper.quit() ,这不可逆转地毒害了线程的消息队列.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值