と GCM を使用しSyncAdapter
て、バックエンド サーバーでのさまざまな種類の変更をアプリに通知しています。たとえば、変更 A がサーバーで発生した場合、 change_a というフィールドを使用してプッシュ通知を行い、これを through に渡しSyncAdapter
ますContentResolver.requestSync()
。このようにしSyncAdapter
て、 はサーバーから何を同期するかを認識します。同様に、変更 B の場合、change_b というフィールドを送信します。
これは、1 つのユース ケースを除いて完全に機能します。change_a 通知を送信すると呼び出しますContentResolver.requestSync()
が、ネットワークが利用できないため、SyncAdapter
まだ呼び出されていません。その後、change_b 通知を送信するContentResolver.requestSync()
と、新しいフィールドで再度呼び出されます。そして、ネットワークが起動すると、SyncAdapter
が呼び出されますが、最新のフィールド change_b のみを使用するため、変更 A は同期されません。
したがって、基本的に、まだ SyncAdapter をトリガーしていないContentResolver.requestSync()
以前のすべての呼び出しをオーバーライドします。requestSync()
SyncAdapter は、送信された最新のエクストラで実行されます。
これに対する 1 つの解決策は、変更 A と変更 B を区別せず、SyncAdapter
すべてを同期させることです。しかし、これは帯域幅にとってコストがかかります。何をいつ同期するかを制御したい。これを修正するためにできることはありますか (おそらく syncadapter フラグ)?