我正在从后台运行IntentService进行一些服务调用,但它没有等待服务调用返回。经过我的研究,似乎只有两个选项,1。使用Service而不是IntentService 2.进行同步http调用而不是异步。 有什么办法,我可以从IntentService进行异步http调用并监听http回调吗?
答案 0 :(得分:3)
IntentService是一种在服务中的后台线程内托管回调(onHandleIntent)的奇特方式。
一旦onHandleIntent返回(不等待你的异步调用以取回结果),意图服务就会关闭。
为了使其工作,您应该添加另一层同步(例如互斥),但这会浪费intentservice的简单性。
我要做的是使http调用同步,或者将调用移动到服务(如果你真的需要在服务中进行调用而不是像活动或片段那样从前端组件调用)。 / p>
答案 1 :(得分:1)
从IntentService对您的http后端进行同步调用。 IntentService本身已经在后台线程上运行,所以它只是等待你的后端调用完成它是有意义的。
答案 2 :(得分:0)
我不确定这是否是你想要的,但如果你想执行一些IntentService工作,那么你可以使用Executor来实现:
ExecutorService executor = Executors.newSingleThreadExecutor();
then inside IntentService handler:
Future<?> fut = executor.submit(new Runnable() {
// here do your network operations
});
// here do some other stuff inside IntentService handler
// wait for your http operation
fut.get();