应用程序进入后台后,在一定时间后运行代码?

时间:2018-12-15 06:35:49

标签: android ios dart flutter

我想效仿该应用程序的一个特殊功能,称为Forest。 基本上,您可以在应用程序中启动计时器,而不必从中退出。 如果应用程序位于前台和/或屏幕关闭,则此计时器倒计时。

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

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

我不确定如何阅读Flutter / Dart文档,但Flutter中可用的生命周期状态是从我们这里抽象出来的。我是否需要运行一些后台代码或触发中断?我查看了可用的插件,但它们不允许15分钟以下的触发器。如何通过本机Android / iOS代码实现?

1 个答案:

答案 0 :(得分: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:上面提供的示例代码摘自插件示例。