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

时间:2018-01-20 10:37:58

标签: android android-service android-6.0-marshmallow

核心逻辑:维护本地数据库中的已发布文章。              当设备获得网络访问权限时同步文章。

使用的课程

  • 文章的模型类。
  • AccountManager来处理帐户。
  • 在AndoidManifest中注册的SyncService类与元数据android:name =" android.content.SyncAdapter"                 机器人:资源=" @ XML / syncadapter"
  • SyncAdapter类扩展了SyncSevice使用的AbstractThreadedSyncAdapter。
  • ArticleProvider扩展了ContentProvider类,用于管理ContentProvider中的文章数据。
  • syncadapter.xml,其中包含有效的ContentAuthority。

该应用按预期工作至Lollipop版本。 (即:)当网络连接可用时,它从内容提供商获取文章数据并发布到服务器。

问题出现在 Marshmallow版本中,requestSync()未触发onPerformSync()。因此不会发生同步。在这种情况下提供建议。

1 个答案:

答案 0 :(得分:5)

  

问题出现在Marshmallow版本中,requestSync()没有触发onPerformSync()。因此不会发生同步。在这种情况下提供建议。

@Sackurise Android 6.0 M实现了Doze和App Standby模式。这应该是节电管理的一个很酷的事情,但事实并非如此。很多开发人员都遇到了和你一样的问题。他们的应用后台服务/流程无法正常运行,问题是Android M中的这一新功能。

虽然谷歌表示将您的应用添加到特殊白名单可以解决问题(只有在需要或您的应用可能会被禁止访问谷歌游戏商店时,请查看https://developer.android.com/training/monitoring-device-state/doze-standby.html),有一个帖子涉及整个问题的谷歌代码甚至谷歌员工都认为这个白名单并没有帮助依赖后台工作的应用程序(网络访问,获取传感器数据......)

我会在https://code.google.com/archive/p/android-developer-preview/issues/2225

留下该帖子的链接

这只发生在Android M中,因为我在Android Nougat中测试我自己的应用程序并且它可以正常工作(Nougat有Doze和App Standby功能,但是它们得到了很多改进)。

我鼓励您继续尝试找到解决此问题的方法,如果您已成功解决,请分享!