Я использую SyncAdapter
и GCM, чтобы уведомлять свое приложение о различных типах изменений на внутреннем сервере. Например, если на сервере происходит изменение A, я отправляю push-уведомление с помощью поля с именем change_a, которое передаю от SyncAdapter
до ContentResolver.requestSync()
. Таким образом, SyncAdapter
знает, что синхронизировать с сервера. Точно так же для изменения B я отправляю поле с именем change_b.
Это отлично работает, за исключением одного варианта использования. Я отправляю уведомление change_a, оно вызывает ContentResolver.requestSync()
, но из-за отсутствия доступности сети SyncAdapter
еще не вызывается. Если после этого я отправляю уведомление change_b, снова вызывается ContentResolver.requestSync()
с новым полем. А затем, когда сеть активна, вызывается SyncAdapter
, но только с последним полем change_b и, соответственно, он не будет синхронизировать изменение A.
Таким образом, в основном ContentResolver.requestSync()
отменяет все предыдущие requestSync()
вызовы, которые еще не активировали SyncAdapter. SyncAdapter работает с последними отправленными дополнениями.
Одно из решений - не различать изменение A и изменение B и SyncAdapter
синхронизировать все. Но это дорого обходится полосе пропускания. Я хочу контролировать, что и когда синхронизировать. Есть ли что-то, что я могу сделать, чтобы это исправить (возможно, флаг syncadapter)?