android - 一旦应用程序进入后台,在一定持续时间后 flutter 运行代码?

标签 android ios dart flutter

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

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

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

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

最佳答案

您可以使用 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:上面提供的示例代码取自插件示例。

关于android - 一旦应用程序进入后台,在一定持续时间后 flutter 运行代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53790170/

相关文章:

dart - IronResponse 调用 JsObjectImpl 对象,但我找不到它的类文档

flutter - "Unable to load asset"与图像选择器

android - 相对布局位置

android - qHD 分辨率的可绘制对象

android - MotionLayout 打破(嵌套) subview 的重绘

ios - MMDrawerController实例化

iphone - 替换 Objective-c 中的换行符 char(10)

ios - 我是否需要个人 Apple 开发者帐户来发布与我的公司帐户分开的应用程序?

list - 如何按另一个列表对列表进行排序

android - 将工具栏用作操作栏时如何设置 SearchView 的样式?