android - Android 定期 Worker 停止重复,并且地理围栏在几天后停止触发
问题描述
我正在开发一个 Android (Kotlin) 应用程序,管理员可以在其中注册家属并随时监控他们的位置和设备状态。此外,这些管理员可以在地图上标记他们希望在其家属进入或离开这些位置时得到通知的地方。为了实现这一点,我使用地理围栏进行位置进入/退出监控,以及重复 10 到 20 分钟的独特周期性工作。
这个工人做什么:
- 尝试获取用户位置(超时:30 秒)并将其上传到服务器。
- 检查服务器的配置文件更新(姓名、电子邮件、其他信息),如果需要,更新本地数据库(房间)。
- 检查服务器是否有新位置。如果找到新地点,请将它们保存在本地数据库(房间)中,删除所有当前地理围栏并重新创建它们。(地理围栏是 NEVER_EXPIRE)
我还为 BOOT_COMPLETED 事件添加了一个广播接收器,负责从工作人员本地保存的位置重新创建地理围栏,因为重新启动后系统不会重新创建地理围栏。系统会自动重启worker。
为了帮助调试,我使用 Room 创建了一个简单的日志系统,该系统记录每次执行 Worker 时、创建/删除地理围栏时、接收到 BOOT_COMPLETED 等事件并发生地理围栏转换。
我遇到的问题是这个工人停止重复自己,通常在 3 天左右。如果服务器注意到一个依赖者在一小时内没有发送任何更新,它会触发“Revive”推送通知。该应用程序使用它来重新启动 Periodic Worker。即使应用程序成功接收并重新启动工作,它也只会重复大约 1 小时,然后再次停止。
同时,地理围栏转换停止触发。除了在服务器上找到新地点时负责创建地理围栏之外,我找不到地理围栏触发器和定期工作人员之间的任何关系。通过分析日志,地理围栏是在设备重启后正确创建的,但它们不会触发。
如果用户打开应用程序,工作人员将重新创建,并以 2-3 天的间隔返回重复,并且地理围栏开始正确触发。
有没有人遇到过工人或地理围栏的类似问题并设法提出解决方案?
解决方案
推荐阅读
- php - 我如何检查多维数组php中的特定元素
- ionic3 - 如何在 FCM 推送通知 IONIC-3 上打开特定页面?
- jmeter - JMeter - 将文件作为正文参数的一部分传递
- c - 为什么我的 x64 程序在 Windows 上静默崩溃?
- laravel - 使用 datepicker 检查 18 岁以上用户的年龄
- ibm-cloud - IBM Cloud App ID:如何使用 ibmcloud-appid 为用户设置登录?
- php - 如何使用php在while循环中填充引导导航选项卡上的数据
- java - 如何在 Java 中使用 MapStruct 进行参数化映射?
- javascript - 在一组按钮中激活单个按钮
- batch-file - 批处理/查找和编辑 TXT 或 XML 文件中的特定位置并将其替换为随机