如何使用 flutter-workmanager 访问 Workmanager.executeTask 回调中的单例对象

问题描述

全局创建 List<String> mainList 并在 main() 函数添加一项。但是在Workmanager.executeTask的回调里面,mainList的lenth还是0,就连mainList的hashCode也不一样。

  • 为什么会这样?
  • 如何将 mainList 设为 Singleton?
  • 尝试打印 Isolate.current.debugName,它始终是“main”。
List<String> mainList=[];
void callbackdispatcher() {
  Workmanager.executeTask((task,inputData) {
    print("mainList.length=${mainList.length}"); // always length is 0
    print("Isolate.current.debugName = ${Isolate.current.debugName}");
    return Future.value(true);
  });
}

void main() {
  Workmanager.initialize(
    callbackdispatcher,isInDebugMode: true,);
  mainList.add("String1");
  print("mainList.length=${mainList.length}"); // length is 1
  print("Isolate.current.debugName = ${Isolate.current.debugName}");
  Workmanager.registerPeriodicTask("1","simpleTask");
  runApp(MyApp());
}

解决方法

ListenableWorker.startWork() 中,每次都会创建一个新的 FlutterEngin 实例并执行 Workmanager.executeTaskcallback

所以无法使用单例对象。

BackgroundWorker.kt

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...