在Marshmallow及以上版本中使用SyncAdapter同步时出现问题

6

核心逻辑:在本地数据库中维护发布的文章信息。设备连接网络后同步文章。

使用的类:

  • 文章的模型类。
  • 用于处理账户的AccountManager。
  • SyncService类在AndoidManifest中注册,具有meta-data android:name="android.content.SyncAdapter" 和 android:resource="@xml/syncadapter"。
  • SyncAdapter类扩展了AbstractThreadedSyncAdapter,由SyncSevice使用。
  • ArticleProvider扩展了ContentProvider类,用于在ContentProvider中管理文章数据。
  • syncadapter.xml 包含有效的ContentAuthority。

该应用程序在Lollipop版本上按预期工作。也就是说,它从内容提供程序获取文章数据,并在网络连接可用时将其发布到服务器。

从Marshmallow版本开始出现问题,requestSync()未触发onPerformSync()。因此,同步未发生。请针对此情况提供建议。

1个回答

5
问题出现在Marshmallow版本上,requestSync()不会触发onPerformSync(),因此无法进行同步。在这种情况下提供建议。
@Sackurise Android 6.0 M实现了Doze和App Standby模式。这本来是省电管理的一个很酷的功能,但事实并非如此。许多开发人员都遇到了与您相同的问题。他们的应用程序后台服务/进程不能按照预期工作,问题就在Android M中的这个新功能上。
尽管Google表示将您的应用程序添加到特殊白名单中可以解决问题(仅在需要时或否则您的应用程序可能会被禁止在Google Play商店上架,请参见https://developer.android.com/training/monitoring-device-state/doze-standby.html),但在Google Code上有一篇文章涉及整个问题,甚至一位Google员工也承认,这个白名单对于依赖后台工作的应用程序(网络访问、获取传感器数据等)没有帮助。
我会在这里留下该帖子的链接 https://code.google.com/archive/p/android-developer-preview/issues/2225 这只会发生在Android M中,因为我正在Android Nougat中测试自己的应用程序,并且它按照预期工作(Nougat也具有Doze和App Standby功能,但它们得到了很大改进)。
我鼓励您继续努力寻找解决此问题的方法,如果您成功了,请分享!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接