7

バックグラウンドで実行されるIntentSerivceことがありますが、場合によっては非常に長時間実行されるプロセスになる可能性があります。GCM基本的には停止してポーリングし、プッシュ通知を無視するアプリケーションを終了するオプションをユーザーに提供します。ただし、プッシュ通知が届き、IntentService必要な処理が完了するまでに時間がかかる場合(サーバーから情報を取得し、必要に応じて、新しいメッセージが到着したなどの通知をユーザーに送信します)。

intentserviceここに問題があります。ユーザーがまだ実行中にアプリを「終了」することを選択した場合でも、私が望まない通知を受け取ることになります。サービスの方法があることは知ってstopSelf()いますが、ユーザーがメニューボタンを使用してアプリケーションを「終了」することを知っている場合は、アクティビティでサービスを停止する必要があります。intentインテントがキューに入れられ、アクティビティの呼び出しも機能しないため、サービスへの別の送信は機能しcontext.stopService(intent);ません。他にどのように停止できますか?

4

2 に答える 2

8

で使用されている新しいものを渡しますIntentstopService(Intent)、それとも元のものを渡しますかstartService(Intent)。元のインテントに合格すると、サービスが停止します。

Handlerを使用してサービスを渡すことができなかった場合Message。インターフェースをIntentService実装しHandler.Callback、に新しいものを作成しHandler(Handler.Callback)て、コールバックとしてActivity渡します。IntentService次にonHandleMessage()、IntentServiceにを実装して呼び出しstopSelf()Activity停止するときにメッセージを渡します。

于 2012-08-24T16:21:47.400 に答える
3

以下のコードは、IntentServiceをActivityから停止するために完全に機能しています。

stopService(new Intent(getApplicationContext(), MyIntentService.class));
于 2015-04-21T08:08:17.397 に答える