そのキューに関する情報を入手してください
-
27-10-2019 - |
質問
Webサーバーに作成する必要があるWebサービスコールをキュートするIntentserviceがあります。したがって、それぞれの意図は、行われるWebサービスコールです。
私のアプリケーションが特定のデータを含む意図があるかどうかを私のアプリケーションに尋ねることができる場所を設定したいと思います(つまり、「あなたはすでにxデータをクラウドに尋ねるのを待っていますか?やれ?")。
これを行うためにIntentserviceをどのように拡張するかについての提案はありますか? Intentserviceの意図キューを通過できますか?または、Intentserviceコードを取得して変更する必要がありますか?
私が持っている他の唯一のアイデアは、キューに通話される呼び出しがデータベースとログにテーブルを追加することであり、各ログが完了するとテーブルから削除されます。
解決
これを行うためにIntentserviceをどのように拡張するかについての提案はありますか? Intentserviceの意図キューを通過できますか?または、Intentserviceコードを取得して変更する必要がありますか?
実際のキューを本当に調べたい場合は、おそらく後者です。 IntentService
回転します Intents
aのメッセージキューに表示されたメッセージに Looper
を経由します HandlerThread
. 。ただし、SDKを介して公開されていません。幸運、 IntentService
かなり短いです - 150行でさえありません。独自のパッケージにクローンして、必要に応じて変更を加えることができます。 AOSPリポジトリで新しいソースの更新がリリースされたときにソースでDIFFを実行するだけなので、Googleが大手術を行ったかどうかがわかります IntentService
あなたが利用したいかもしれないそれ自体。
私が持っている他の唯一のアイデアは、キューに通話される呼び出しがデータベースとログにテーブルを追加することであり、各ログが完了するとテーブルから削除されます。
そのように持続する必要さえありません。 IntentService
独自のキューは永続的ではありません。独自のFIFOキューを維持するだけです onStartCommand()
, 、スーパークラスに接続し、あなたをポップします Intent
終了時にキューから外れます onHandleIntent()
. 。これはマスターキューと同期しなくなる可能性があります(たとえば、使用することをお勧めします finally
自分のキューから作業をポップするようにしますが、クラスをクローンする必要はありません。
他のヒント
別の解決策は、StartCommandをオーバーライドすることでそれを解決することです。
ここ 同様の問題のインスピレーションを見つけたスムーズな解決策です:)