如何每 15 秒在后台 运行 一些 dart 代码
How to run some dart code in the background, every 15 seconds
我创建了每 15 秒检查一次通话记录列表的应用程序。我已经使用 Timer.periodic() 来实现这一点。一切正常,但前提是应用程序不在后台 运行。应用程序在后台运行几分钟后,Timer.periodic 安排的任务不再执行。我试过使用 android_alarm_manager https://pub.dev/packages/android_alarm_manager 但它根本不起作用。它正在记录 /FlutterBackgroundExecutor(11431): Starting AlarmService... 但是没有任何反应。
import 'dart:isolate';
import 'package:flutter/material.dart';
import 'package:android_alarm_manager/android_alarm_manager.dart';
void main() async{
await WidgetsFlutterBinding.ensureInitialized();
await AndroidAlarmManager.initialize();
runApp(MyApp());
final int helloAlarmID = 0;
await AndroidAlarmManager.periodic(Duration(seconds: 5), helloAlarmID, printHello);
}
class MyApp extends StatelessWidget {
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return MaterialApp(
home: MyHomePage(),
);
}
}
void printHello() {
final DateTime now = DateTime.now();
final int isolateId = Isolate.current.hashCode;
print("[$now] Hello, world! isolate=${isolateId} function='$printHello'");
}
我还有其他实现目标的可能性吗?
Android 将后台使用限制为每 15 分钟左右。 pub.dev 上有几个包可以 运行 在后台编码,即使在应用程序关闭时也是如此。但是我认为他们中的任何一个都不能每 15 秒 运行 您的代码。
套餐包括:
background_fetch
工作经理
flutter_background_service
还有几个。
我创建了每 15 秒检查一次通话记录列表的应用程序。我已经使用 Timer.periodic() 来实现这一点。一切正常,但前提是应用程序不在后台 运行。应用程序在后台运行几分钟后,Timer.periodic 安排的任务不再执行。我试过使用 android_alarm_manager https://pub.dev/packages/android_alarm_manager 但它根本不起作用。它正在记录 /FlutterBackgroundExecutor(11431): Starting AlarmService... 但是没有任何反应。
import 'dart:isolate';
import 'package:flutter/material.dart';
import 'package:android_alarm_manager/android_alarm_manager.dart';
void main() async{
await WidgetsFlutterBinding.ensureInitialized();
await AndroidAlarmManager.initialize();
runApp(MyApp());
final int helloAlarmID = 0;
await AndroidAlarmManager.periodic(Duration(seconds: 5), helloAlarmID, printHello);
}
class MyApp extends StatelessWidget {
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return MaterialApp(
home: MyHomePage(),
);
}
}
void printHello() {
final DateTime now = DateTime.now();
final int isolateId = Isolate.current.hashCode;
print("[$now] Hello, world! isolate=${isolateId} function='$printHello'");
}
我还有其他实现目标的可能性吗?
Android 将后台使用限制为每 15 分钟左右。 pub.dev 上有几个包可以 运行 在后台编码,即使在应用程序关闭时也是如此。但是我认为他们中的任何一个都不能每 15 秒 运行 您的代码。
套餐包括:
background_fetch
工作经理
flutter_background_service
还有几个。