GCMネットワークマネージャを使用してバックエンドサービスにログを送信しようとしています。 OneofTaskを作成する毎時アラームが実行され、実行時にログメッセージとともにバックエンドサービスが呼び出されます。GCMネットワークマネージャがジョブを失う
これは機能しますが、非常に大量のタスクが失われます(半分以上)。最初は、バックエンドやネットワークと関係があると思っていましたが、大量のファイルロギングを追加した後、サービスのonRunTaskは決してこれらのタスクのために起動されませんでした。 ??、再び
GcmNetworkManager.getInstance(context).schedule(new OneoffTask.Builder()
.setService(AvroLogService.class)
.setExtras(bundle)
// A mandatory tag which identifies the task
// We add a unique hash to the tag to make sure that
// tasks are logged and not thrown away as dupes.
// See: http://stackoverflow.com/q/34528960/304262
.setTag(java.util.UUID.randomUUID().toString())
// Persist to disk, even across boots:
.setPersisted(true)
// Sets a time frame for the execution of this task in seconds.
// This specifically means that the task can either be
// executed right now, or at latest at a certain point:
.setExecutionWindow(0, TWO_WEEKS_IN_SECONDS)
.build());
これはために動作しますが、メッセージの一部だけではない:これらの失われた私は、APIを誤解アム、または単に信頼性の高いOneoffTasksをではありません
これはOneoffTaskが予定されている方法です。その後に失われたメッセージは、上記のコードは であり、確かにが実行されています(これを確認するためにファイルのログを追加しましたが)失われたものに対してトリガされたonRunTaskを指定する。
私が検証されていること:
- マニフェストは、Network Managerの実装ガイドに従って更新されるが(https://developers.google.com/cloud-messaging/network-manager)は
- AvroLogService(私のサービスは) が
- それはonRunTask
- アプリが持っているよりも優先されますGcmTaskServiceを拡張しますRECEIVE_BOOT_COMPLETED権限。
- AvroLogServiceはonStartCommandをオーバーライドしません。
私は迷っています。誰かがこれについての洞察を共有することはできますか?
この[GitHub投稿](https://github.com/google/gcm/issues/67)をチェックしてください'GcmNetworkManager'の使用に関する洞察と例を示します。もしあなたがそうしていなければ、 'onRunTask()'の中であなたのタスク実行のロジックを提供する必要があることがポストで言及されており、その特定のタスクが行うために必要な状態を把握しなければなりませんあなたが欲しいもの。 – Teyam
ありがとうございましたが、その投稿はこの問題に関連する洞察を提供していませんでした。ポストはデータをタスクに渡すことについて話していますが、私はsetExtras機能を使用していますが(問題の投稿が書かれたときには存在しないようです)、この問題にはあまり関係ありません。 問題は、onRunTask内のコードが断続的に実行されないことです。私。それは何度も実行されますが、キューに入れられたタスクの多くも失われます。それは、たとえ成功したとしても、失われたタスクの大部分がonRunTaskに到達しないようなものです。 –