首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在后台将颤动应用的数据同步到服务器

在后台将颤动应用的数据同步到服务器
EN

Stack Overflow用户
提问于 2021-06-18 12:55:44
回答 1查看 147关注 0票数 0

我正在开发一个带有flutter的计时器应用程序,它应该以固定的重复间隔将它的时间同步到我的服务器上。所以,当用户启动计时器时,应用程序应该每隔5分钟向我的服务器发送一次确认‘计时器正在运行’之类的东西,即使手机被锁定。我尝试使用以下方法用android alarm manager plugin实现它:

代码语言:javascript
复制
await AndroidAlarmManager.oneShot(Duration(minutes: 5), MY_ID, syncFn, exact: true, allowWhileIdle: true);

syncFn向我的服务器发送一个请求,然后重新调度相同的警报,因此如下所示:

代码语言:javascript
复制
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警报管理器方法,比如periodic (这个方法的问题是它不是完全周期性的)和参数,但没有注意到改进

感谢您的阅读和帮助!

EN

回答 1

Stack Overflow用户

发布于 2021-06-18 14:07:57

首先,您需要检查您的后台服务在哪里没有运行,或者告警管理器没有触发。添加日志之前

代码语言:javascript
复制
await BackgrdoundService().sync();

因为可能是Android限制了后台服务。请查看此链接以了解更多信息https://developer.android.com/about/versions/oreo/background

其次,最好使用WorkManager而不是AlarmManager,因为它在安卓中已被弃用。

如果问题是后台服务限制,那么不要运行服务,而是将您的逻辑放在function中。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68029511

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档