一尘不染

在Android的IntentService中等待异步回调

java

我有一个IntentService在另一个类中启动异步任务,然后应该等待结果。

问题是方法IntentService将在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(...)。似乎可以正常工作。

但这绝对不是一个干净的解决方案。也许甚至有一些严重的问题。

有更好的解决方案吗?


阅读 391

收藏
2020-12-03

共1个答案

一尘不染

使用标准Service类代替IntentService,从onStartCommand()回调启动异步任务,并Service在收到完成回调时销毁。

与此相关的问题是,由于ServiceService已经运行的同时又被启动,因此在同时运行的任务的情况下,可以正确处理的销毁。如果需要处理这种情况,则可能需要设置一个运行中的计数器或一组回调,并Service在它们全部完成后销毁它们。

2020-12-03