2017-11-28 5 views
0

私はIntentServiceを拡張するクラスABCを持っています。このクラスは、WakefulBroadcastReceiverを拡張するDEFという受信者クラスによって呼び出されます。IntentServiceオブジェクトが完全に処理され、無限の時間がかかる場合、他のキューイングされたインテントはどのように処理されますか?

DEFクラスがインテントを受信するたびに、startWakefuleServiceを呼び出し、そのインテントをABCクラスに渡します。

ABCクラスのonHandle()では、インテントが処理され、関連情報がコールバックを使用してサーバーに送信されます。

onHandle()の最後に、DEF.completeWakefulIntent(intent)が呼び出されて、Wake Lockが返されます。

は、私の質問は、次のシナリオについてです:

  1. 私BroadcastReceiverクラスDEF、それは、クラスABCを介して複数のIntentServicesを開始

  2. 複数のインテントを受け取りました。

  3. 最初のインテントサービスは、サーバーにHTTP要求を行います。これは、戻ってくるのに時間がかかったり、まったく戻ってこない場合があります。

開始された他のインテントサービスは、処理を待っているか、処理待ちのキューに滞留しますか?

[documentation](https://developer.android.com/reference/android/app/IntentService.html)は、IntentServiceオブジェクトが順番に処理されることを示しています。

ご協力いただければ幸いです。

答えて

1

IntentServiceへのすべての要求は、1つのスレッドで処理され、順番に完了します。要求がonHandleIntent()をブロックして完了できない場合、それ以上の要求は処理されません。

サービスのインスタンスは1つだけです。 「他のIntentService」のようなものはありません。

すべての要求は、単一のワーカースレッドで処理されている - 彼らは必要な 限りがかかる場合があります(と、アプリケーションのメインループをブロックしません)、 一つだけの要求が一度に処理されます。

+0

ありがとうございます。私の場合は、POSTリクエストを実行している間に非同期呼び出しを行っていますが、サーバーからの応答を受け取るまで、IntentServiceは他のオブジェクトをブロックしますか?言い換えれば、処理が完了したときをどのように知るのですか? – Kanika

+0

プロジェクトの詳細がわかりません。 onHandleIntent()の前回の呼び出しが完了するまで、onHandleIntent()は再び呼び出されません。 onHandleIntent()を使って非同期的に何かを行う場合は、IntentServiceを使用しないでください。 –

+0

何がonHandleIntent()の完了をマークしますか?メソッドの終わりですか?またはcompleteWakefulIntentコール? – Kanika

関連する問題