Flutter-Dart中的后台服务(仅当可见应用程序时)

时间:2019-05-20 19:26:28

标签: service dart flutter background-service

我需要扑朔迷离的后台服务,这使一分钟的http.get(...)

该服务应在应用运行时在后台运行。如果应用已关闭,则后台服务也应停止。当应用启动时,后台服务也应启动。

我只能找到提供后台服务的程序包,该程序包在应用程序关闭时也可以运行-例如以下示例:https://medium.com/flutter-io/executing-dart-in-the-background-with-flutter-plugins-and-geofencing-2b3e40a1a124

也许我要寻找的不是“后台服务”?

这是一些代码,我想在此后台服务/任务中运行...

Timer.periodic(Duration(seconds: 60), (Timer t) => checkForUpdates());    

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题。离开应用程序后,Timer.periodic会在后台运行一段不可控制的时间。我的解决方案是这样的:

class CollectStampsState extends State<CollectStamps> with WidgetsBindingObserver { 
    Timer timer;

    ...

    @override
    void didChangeAppLifecycleState(AppLifecycleState state) {
        if (state != AppLifecycleState.resumed) {
            timer.cancel();
        } else {
        if (!timer.isActive) {
            timer = Timer.periodic(Duration(seconds: 30), (Timer t) => yourFunction());
        }
    }

    @override
    void initState() {
        super.initState();
        timer = Timer.periodic(Duration(seconds: 30), (Timer t) => yourFunction());
        WidgetsBinding.instance.addObserver(this);
    }

    @override
    void dispose() {
        timer?.cancel();
        WidgetsBinding.instance.removeObserver(this);
        super.dispose();
    }

     @override
     Widget build(BuildContext context) {
        ... 
     }
}

如果要在其他地方使用它,也可以保存AppLifecycleState,或者更改其他AppLifecycleStates的行为。但是像这样,只有在应用程序处于前台时,计时器才处于活动状态。只要它在后台,计时器就会被取消。