Flutter中使用Workmanager插件的后台任务无法运行

4

我正在尝试通过按钮触发一些后台任务,但发现Flutter的workmanager插件非常难以调试。它偶尔可以工作,但这种情况很少。

我正在使用这个基本应用程序进行测试:

import 'package:flutter/material.dart';
import 'package:workmanager/workmanager.dart';

const task1 = "simpleTask";

void main() {
  WidgetsFlutterBinding.ensureInitialized();
  Workmanager.initialize(
      callbackDispatcher, 
      isInDebugMode: true, 
  ); 
  //Workmanager.registerPeriodicTask("1", task1, initialDelay: Duration(seconds: 10), frequency: Duration(minutes: 15));
  //Workmanager.registerOneOffTask("1", task1, initialDelay: Duration(seconds: 5));
  runApp(MaterialApp(
  home: Scaffold(
    body: Container(
      color: Colors.blueAccent[400],
      child: Center(
        child: RaisedButton(
          child: Text("create notification in five seconds"),
          onPressed: () {
            Workmanager.registerOneOffTask("1", task1, initialDelay: Duration(seconds: 5));
          },
        ),
      ),
    ),
  ),
));}


void callbackDispatcher() {
  Workmanager.executeTask((task, inputData) {
    print("it's doing the task");
    switch (task) {
      case task1:
        print(task1);
        break;
      case Workmanager.iOSBackgroundTask:
        print("iOS background fetch delegate ran");
        break;
    }
    return Future.value(true);
});
}

我试图从一个按钮中触发一个后台任务,因为之前注释掉的两行代码方式不能正常工作。而且我之前从来没有让Workmanager.registerPeriodicTask起作用过。可能是由于初始延迟时间不会在结束时启动第一个任务,而是开始15分钟的计时器,但测试非常麻烦,因为我必须等待至少15分钟。

我是否遗漏了某个命令或者缺失了必要的await或其他内容?

编辑:我刚刚在Android Studio模拟器上进行了测试,所有通知都按照单次和周期性任务的预期工作,所以我认为问题可能与手机有关。但我真的不确定该怎么做。


你好。你解决了这个问题吗?我现在也遇到了同样的问题。 - kenneth-rebello
@kenneth-rebello 你得到解决方案了吗? :D - Ahmed Elsayed
2个回答

1

0

我已经尝试了您提供的代码,唯一遇到的问题是无法从Workmanager进行静态调用initialize()registerOneOffTask()executeTask()。除此之外,代码运行良好。

正如文档中所述,Android后台任务可能会出现问题,因为Android决定何时运行最佳。即使在调试模式下也没有保证强制运行作业的方法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接