AndroidのIntentServiceで非同期コールバックを待つ質問する

AndroidのIntentServiceで非同期コールバックを待つ質問する

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(...)

しかし、それは明らかにきれいな解決策ではないようです。もしかしたら、それには深刻な問題があるのか​​もしれません。

もっと良い解決策はありますか?

ベストアンサー1

Serviceの代わりに標準クラスを使用しIntentService、コールバックから非同期タスクを開始しonStartCommand()Service完了コールバックを受信したら を破棄します。

この場合の問題は、がすでに実行されているときに が再度開始されたService結果として、同時に実行されているタスクの場合に の破棄を正しく処理するServiceことです。このケースを処理する必要がある場合は、実行中のカウンターまたはコールバックのセットを設定し、すべてServiceが完了した場合にのみ を破棄する必要がある可能性があります。

おすすめ記事