【问题标题】:Flutter run code after certain duration once app goes to background?应用程序进入后台后一定时间后颤振运行代码?
【发布时间】:2019-05-16 08:11:15
【问题描述】:

这个应用程序有一个特殊的功能,叫做 Forest,我想效仿。 基本上,您在应用程序中启动了一个计时器,并且您不会退出它。 如果应用程序处于前台和/或屏幕关闭时,此计时器会倒计时。

有大约 10 秒的给定宽限期,用户可以在此期间退出应用(即按下主页按钮)。如果它们没有在宽限期内返回,则计时器结束并且用户失败。否则计时器继续计数。

基本上,应用程序必须检查它是否是背景。如果是,请启动 10 秒计时器。一旦这个计时器到期,设置一个这样当应用程序回到前台时,用户继续/失败。

我不确定如何在阅读 Flutter/Dart 文档时做到这一点,Flutter 中可用的生命周期状态已从我们那里抽象出来。我是否必须运行一些后台代码或触发中断?我查看了可用的插件,但它们不允许在 15 分钟以下触发。这是如何在原生 Android/iOS 代码中实现的?

【问题讨论】:

    标签: android ios dart flutter


    【解决方案1】:

    您可以使用Android alarm manager。通过它您可以在警报触发时运行一些后台任务。

    import 'package:android_alarm_manager/android_alarm_manager.dart';
    
    void printHello() {
      final DateTime now = new DateTime.now();
      final int isolateId = Isolate.current.hashCode;
      print("[$now] Hello, world! isolate=${isolateId} function='$printHello'");
    }
    
    main() async {
      final int helloAlarmID = 0;
      runApp(...);
      await AndroidAlarmManager.periodic(const Duration(minutes: 1), helloAlarmID, printHello);
    }
    

    即使应用程序结束,也会大致每分钟打印一次“Hello world”。 PS:上面提供的示例代码取自插件示例。

    【讨论】:

      猜你喜欢
      • 2019-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多