当我在 Flutter 应用程序中初始化工作管理器时,它崩溃了。
工作管理器代码
Workmanager().initialize(
callbackDispatcher,
isInDebugMode: true
);
Workmanager().registerPeriodicTask(
"2",
"simplePeriodicTask",
frequency: Duration(minutes: 15),
);
//callbackDispatcher
void callbackDispatcher() {
Workmanager().executeTask((task, inputData) {
log("Native called background task"); //simpleTask will be emitted here.
return Future.value(true);
});
}
您需要等待workmanager初始化。应该是;
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await Workmanager().initialize(callbackDispatcher, isInDebugMode: true);
await Workmanager().registerPeriodicTask("5",
simplePeriodicTask,
existingWorkPolicy: ExistingWorkPolicy.replace,
frequency: Duration(minutes: 15), //when should it check the link
initialDelay:
Duration(seconds: 10), //duration before showing the notification
constraints: Constraints(
networkType: NetworkType.connected,
));
}
void callbackDispatcher() {
Workmanager().executeTask((task, inputData) async {
log("Native called background task");
return Future.value(true);
});
我知道可能有很多原因,包括 Kotlin 版本兼容性和 Flutter 版本兼容性,但这对我有用。
在应用程序的另一个区域,我调用了
await Workmanager().cancelByUniqueName('uniqueName');
出于某种原因,只需从应用程序中删除该行即可解决问题。我尝试将其作为操作按钮重新定位到不同的页面,甚至从 onDispose 覆盖函数进行调用,但由于某种原因,只要代码中存在此行,它就会不断崩溃。
所以我只是将其完全删除,并使用服务器 API 调用来确保在每个打开的应用程序上初始化 WorkManager 时不会创建新的周期性实例。
希望这有帮助。