【发布时间】:2021-06-18 04:55:43
【问题描述】:
我正在开发一个带有颤振的计时器应用程序,它应该以固定的重复间隔将时间同步到我的服务器。因此,当用户启动计时器时 - 即使手机被锁定,应用程序也应该每 5 分钟向我的服务器发送一次确认“计时器正在运行”之类的信息。 我尝试使用以下方法通过android alarm manager plugin 实现它:
await AndroidAlarmManager.oneShot(Duration(minutes: 5), MY_ID, syncFn, exact: true, allowWhileIdle: true);
syncFn 向我的服务器发送一个请求,然后重新安排相同的警报,所以它看起来像这样:
static void syncFn() async {
try{
// send confirmation that app is running to my server
await BackgrdoundService().sync();
} catch (err) {
print(err);
} finally {
await AndroidAlarmManager.oneShot(Duration(minutes: 5), MY_ID, syncFn, exact: true, allowWhileIdle: true);
}
}
当我启动我的计时器时 - 即使手机被锁定,syncFn 第一次执行也不会出现问题,但是当手机被锁定时执行此方法时 - 5 分钟后它不会再触发下一次。另外,15分钟后也不触发,只有在手机屏幕解锁或连接手机充电器时才会触发。
我了解,这是由操作系统电池使用优化引起的,但我不知道如何避免。
我是移动应用程序开发的新手,如果这种从移动应用程序向服务器发送数据的方法是错误的,请告诉我。我已经阅读了 FCM,但我可以看到它用于下游消息传递,不能在我的情况下使用。 此外,我尝试使用其他 android 警报管理器方法,如周期性(这种方法的问题是它不是精确的周期性)并使用参数,但没有注意到改进
感谢您的阅读和帮助!
【问题讨论】: