在Android_ALARM_MANAGER处于抖动状态时运行后台任务 [英] Run a background task with android_alarm_manager in flutter

查看:0
本文介绍了在Android_ALARM_MANAGER处于抖动状态时运行后台任务的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试使用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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆