10

Webサーバーに対して行う必要のあるWebサービス呼び出しをキューに入れるIntentServiceがあります。したがって、各インテントは、行われるWebサービス呼び出しです。

特定のデータを含むインテントがあるかどうかをアプリケーションがこのIntentServiceに要求できるように設定したいと思います(つまり、「クラウドにxデータを要求するのをすでに待っていますか?それとも、次のように指示する必要がありますか?やれ?")。

これを行うためにIntentServiceを拡張する方法について何か提案はありますか?IntentServiceのインテントキューをトラバースできますか?または、IntentServiceコードを取得して変更する必要がありますか?

私が持っている他の唯一のアイデアは、データベースにテーブルを追加し、キューにある呼び出しをログに記録することです。各ログは、完了するとテーブルから削除されます。

4

2 に答える 2

22

これを行うためにIntentServiceを拡張する方法について何か提案はありますか?IntentServiceのインテントキューをトラバースできますか?または、IntentServiceコードを取得して変更する必要がありますか?

実際のキューを本当に調べたい場合は、おそらく後者です。を介してのメッセージキューにポップされたメッセージに変換しIntentServiceます。ただし、SDKを介して公開されるものはありません。幸いなことに、かなり短く、150行もありません。独自のパッケージにクローンを作成し、必要に応じて変更を加えることができます。AOSPリポジトリで新しいソースの更新がリリースされたら、ソースでdiffを実行するだけで、Googleがそれ自体に利用したい大手術を行ったかどうかがわかります。IntentsLooperHandlerThreadIntentServiceIntentService

私が持っている他の唯一のアイデアは、データベースにテーブルを追加し、キューにある呼び出しをログに記録することです。各ログは、完了するとテーブルから削除されます。

IntentService'自身のキューは永続的ではないため、そのように永続的である必要はありません。で独自のFIFOキューを維持onStartCommand()し、スーパークラスにチェーンしてIntent、の最後でキューからポップしますonHandleIntent()。これにより、マスターキューと同期しなくなる可能性があります(たとえば、finally自分のキューから作業を確実にポップするために使用する必要があります)が、クラスのクローンを作成する必要はありません。

于 2011-03-18T20:18:31.360 に答える
1

別の解決策は、onStartCommandをオーバーライドすることによってそれを解決することです。

これは私が同様の問題のインスピレーションを見つけたスムーズな解決策です:)

于 2011-10-26T21:16:11.167 に答える