在Android_ALARM_MANAGER处于抖动状态时运行后台任务 [英] Run a background task with android_alarm_manager in flutter
问题描述
flutter
中的android_alarm_manager
插件定期运行一个简单的后台任务。我按照readme
文件中的说明操作,它可以正常工作,但不能正常工作..
我坚持使用这个示例,首先创建了一个每分钟打印一条消息的周期性任务。在我为应用程序运行热启动后,我在控制台收到了以下消息:
W/AlarmService(4261):尝试启动重复的后台隔离。正在返回...
所以我尝试取消该任务,并创建一个每隔5秒运行一次的新任务。但这并没有奏效。虽然Cancel方法返回True,但第一个任务仍在每分钟运行一次,而不是像Intendet那样每隔5秒运行一次。
正在执行热重新启动...
正在将文件同步到IA Emulator上的设备AOSP...
W/AlarmService(4261):尝试启动重复的后台隔离。正在返回...重新启动应用程序的时间为%2.194ms。
I/AlarmService(4261):AlarmService已启动!
i/fltter(4261):[2020-07-24 06:21:34.697305]你好,世界!隔离=531288143
i/fltter(4261):[2020-07-24 06:22:34.635681]你好,世界!隔离=531288143
i/fltter(4261):[2020-07-24 06:23:52.208643]你好,世界!隔离=531288143
i/fltter(4261):[2020-07-24 06:25:14.658737]你好,世界!隔离=531288143
i/fltter(4261):[2020-07-24 06:26:14.703225]你好,世界!隔离=531288143
i/fltter(4261):[2020-07-24 06:27:14.728071]你好,世界!隔离=531288143
i/fltter(4261):[2020-07-24 06:28:14.760309]你好,世界!隔离=531288143
这是我正在使用的代码。当我第一次执行它时,我将id 0赋予每分钟运行一次的任务。所以我尝试取消此ID,并在初始化后创建一个新ID。
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await AndroidAlarmManager.cancel(0);
await AndroidAlarmManager.initialize();
runApp(TimeReminder());
await AndroidAlarmManager.periodic(const Duration(seconds: 5), 0, printHello);
}
void printHello() {
final DateTime now = DateTime.now();
final int isolateId = Isolate.current.hashCode;
print("[$now] Hello, world! isolate=$isolateId");
}
有人知道如何修复这个问题吗?或者一般说来,有人能给我解释一下吗?是否有可能获得我设置的所有任务的概述?
提前谢谢!
推荐答案
由于您使用的时间间隔不到1分钟,您的问题可能是系统限制。根据this comment:
从Android 5.1开始,使用AlarmManager进行定期触发的最小间隔为1分钟。因此,即使您传递了一个较小的持续时间,它也将默认为1分钟。如果您希望更频繁地调用,则应查看Handler。
这篇关于在Android_ALARM_MANAGER处于抖动状态时运行后台任务的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!