我有一个IntentService在另一个类中启动异步任务,然后应该等待结果。
IntentService
问题是方法IntentService将在onHandleIntent(...)方法运行完成后立即完成,对吗?
onHandleIntent(...)
这意味着,通常,IntentService在启动异步任务后,它将立即关闭,并且不再在那里接收结果。
public class MyIntentService extends IntentService implements MyCallback { public MyIntentService() { super("MyIntentService"); } @Override protected final void onHandleIntent(Intent intent) { MyOtherClass.runAsynchronousTask(this); } } public interface MyCallback { public void onReceiveResults(Object object); } public class MyOtherClass { public void runAsynchronousTask(MyCallback callback) { new Thread() { public void run() { // do some long-running work callback.onReceiveResults(...); } }.start(); } }
如何使以上代码段正常工作?开始任务后,我已经尝试放入Thread.sleep(15000)(任意持续时间)onHandleIntent(...)。似乎可以正常工作。
Thread.sleep(15000)
但这绝对不是一个干净的解决方案。也许甚至有一些严重的问题。
有更好的解决方案吗?
使用标准Service类代替IntentService,从onStartCommand()回调启动异步任务,并Service在收到完成回调时销毁。
Service
onStartCommand()
与此相关的问题是,由于Service在Service已经运行的同时又被启动,因此在同时运行的任务的情况下,可以正确处理的销毁。如果需要处理这种情况,则可能需要设置一个运行中的计数器或一组回调,并Service在它们全部完成后销毁它们。