Flutter:如何设置背景计时器



我想在用户退出应用程序时,让后台计时器继续运行,并将应用程序从应用程序历史记录中清除。

您应该使用名为background_fetch的flutter包。这将解决您的解决方案。

替代ANS到background_fetch:

如果你的要求只是把定时器放在后台。这应该是简单的方法。只需尝试以下代码:

Timer timer;
@override
void initState() {
super.initState();
timer = Timer.periodic(Duration(seconds: 15), (Timer t){
setState(() {});
});
}
@override
void dispose() {
timer?.cancel();
super.dispose();
}

解决方案2:

如果你想在后台完成几项任务,那么我建议你使用下面的媒体文章链接https://medium.com/flutter/executing-dart-in-the-background-with-flutter-plugins-and-geofencing-2b3e40a1a124.

其他解决方案

如果您使用的是flatter_bloc,则使用此解决方案https://medium.com/flutter-community/flutter-timer-with-flutter-bloc-a464e8332ceb.

这已经很复杂了,因为Dart是单线程的。

问题是你想让计时器运行,甚至";而用户不在应用程序中,并且该应用程序从应用程序历史记录中被刷出">

分离物是一种潜在的解决方案。但隔离的问题是,当你的应用程序在后台时,它会运行,但当应用程序本身被杀死时,操作系统会杀死它。我建议阅读这里的分离物

另一种解决方案是使用android_alarm_manager_plus访问android AlarmManager服务,并在警报响起时在后台运行Dart代码。但iOS上没有这样的软件包。

对于类似的问题,我所做的是倾听flutter的生命周期挂钩并使用shared_prefernces保存计时器值:当应用程序在前台并且计时器启动时,监听Flutter的生命周期挂钩以了解状态更改。一旦应用程序从f/g中删除(终止或移动到b/g(,就将计时器值保存在shared_preference中。当应用程序再次处于f/g时,检查shared_preferences中的活动计时器,计算保存的计时器和DateTime.now()之间的差值,并从调整后的偏移量恢复计时器。

当应用程序完全失效并且您希望计时器继续运行时,可以帮助您解决问题。

最新更新