【问题标题】:How to run some dart code in the background, every 15 seconds如何在后台运行一些飞镖代码,每 15 秒
【发布时间】:2021-02-13 14:55:06
【问题描述】:

我创建了每 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'");
}

我还有其他实现目标的可能性吗?

【问题讨论】:

    标签: flutter dart android-alarms


    【解决方案1】:

    Android 将后台使用限制为每 15 分钟左右一次。 pub.dev 上有几个包即使在应用程序关闭时也可以在后台运行代码。但是我认为他们中的任何一个都不能每 15 秒运行一次您的代码。

    套餐包括:

    background_fetch

    工作经理

    flutter_background_service

    还有几个。

    【讨论】:

    • 谢谢。但是有些应用程序一直在后台运行。怎么可能?
    • 用户可以通过在电池优化设置中不“允许”应用优化来阻止应用休眠。即使这样,Android 也可能会阻止您的应用一直运行。还有一些其他设置,例如让未使用的应用进入睡眠状态。
    • 我已经这样做了。我的意思是我关闭了我的应用程序上的电池优化。但它仍然会杀死周期性进程
    • 请问你用的是哪个包?
    • 如果您询问电池优化,我手动将其关闭(在我的手机设置中)。为了执行任务,我使用了 Timer.periodic 和 android_alarm_service 包。但它没有工作
    猜你喜欢
    • 2020-09-05
    • 2020-08-10
    • 1970-01-01
    • 1970-01-01
    • 2020-09-27
    • 1970-01-01
    • 2016-07-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多