gpt4 book ai didi

android - 使用 Sync Adapter 和 Alarms 每 15 分钟向服务器发送一次数据

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:15:51 26 4
gpt4 key购买 nike

要求- 我需要大约每15 分钟获取一次用户的位置坐标,并将其发布到服务器。有必要大致按照这些间隔发布数据。

实现 - 我制作了一个同步适配器而不是使用 AlarmManager,因为它可以节省电池电量。我已将 ContentResolver.addPeriodicSync() 设置为大约每 15 分钟同步一次我的应用程序,这会获取当前位置并发布到服务器。

问题 - 如果没有互联网连接,我想继续每 15 分钟获取一次用户位置并将它们保存在本地 sqlite 数据库中。下次互联网恢复时,我会一次性发布所有保存的位置,以便服务器数据保持一致,之后同步将恢复正常。

主要问题 是,当没有互联网时,同步就会停止,我的应用程序将停止接收定期同步回调,而且我无法将数据保存在本地数据库中。所以我想要的是,即使没有互联网,我也会定期收到回调,直到互联网恢复并再次开始自动同步。同步适配器可以做到这一点吗?

我能想到的一个解决方案是当互联网停止时我得到一个广播,那时我开始使用 AlarmManager 每 15 分钟启动一次服务并获取位置并保存到本地数据库。当互联网恢复时,我停止使用 AlarmManager 并返回自动同步。

解决方案 2 - 下面由 David Medenjak 提供。由于 AlarmManager 的 setInexactRepeating() 行为试图模仿 Sync 适配器的行为,同时为不同的应用程序安排警报以减少 CPU 唤醒的次数,因此它也很高效。它还导致更简单的实现。这会比之前比较优缺点的解决方案更好吗?

还有更好的方法吗?

最佳答案

你正在混合两种东西:

  • 每 15 分钟获取一次用户位置
  • 与服务器同步数据

如果您开始混合使用彼此强烈依赖的服务和同步适配器,则必须检查哪些状态已经运行,哪些应该运行。您最终可能会得到您想要的东西(每 15 分钟同步一次,如果用户离线则缓存它)但它很难测试和维护。


始终使用每 15 分钟运行一次的服务来存储当前用户位置。

定期将所有更新同步到服务器。这也可能恰好是每 15 分钟一次,但您不应该依赖于此。

通过让一部分仅存储位置而另一部分仅同步数据,您将可以更轻松地处理事情。而且您也不必担心互联网连接或同步间隔(因为不能保证同步适配器在准确的时间运行)。


关于电池生命周期 (评论)

无论是 SyncAdapter 使用 gps 并立即发布它还是服务暂时保留它直到适配器同步它,应该没有太大区别。一旦任务必须每 x 分钟运行一次,设备就必须唤醒。

如果同步以比服务慢的速度运行,可能会有轻微的改进,因为单独的 gps 可能不需要任何互联网连接。

关于android - 使用 Sync Adapter 和 Alarms 每 15 分钟向服务器发送一次数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35340624/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com