flutter - 无法使用 workmanager 在后台执行异步方法
问题描述
在我的应用程序中,我需要在后台执行一些任务(而应用程序没有在前台运行)。我可以在后台执行一些方法,但是我需要在后台执行一个我不能执行的异步方法。
这是我的代码的一部分:
void main() {
runApp(MaterialApp(
home: Home(),
));
Workmanager.initialize(callbackDispatcher, isInDebugMode: true);
Workmanager.registerPeriodicTask("1", "simplePeriodicTask",
existingWorkPolicy: ExistingWorkPolicy.replace,
frequency: Duration(minutes: 15),
initialDelay:
Duration(seconds: 5),
constraints: Constraints(
networkType: NetworkType.connected,
));
}
void callbackDispatcher() {
Workmanager.executeTask((task, inputData) {
_HomeState().manager();//This is not Working
print('Background Services are Working!');//This is Working
return Future.value(true);
});
}
class Home extends StatefulWidget {
@override
_HomeState createState() => _HomeState();
}
class _HomeState extends State<Home> {
@override
void initState() {
login();
super.initState();
}
void manager() async {
if (account == null) {
await login();
await managerLocal();
managerDrive();
} else {
await managerLocal();
managerDrive();
}
}
.......
.......
}
解决方案
您需要等待您的方法实际完成:
void callbackDispatcher() {
Workmanager.executeTask((task, inputData) async {
await _HomeState().manager();
print('Background Services are Working!');//This is Working
return true;
});
}
您的manager
方法可能应该返回 a Future<void>
,因为它是async
.
如果您不确定如何处理Future
数据,请随时查看此处。
推荐阅读
- c++ - 在c ++中将预增量变量与自身相乘的奇怪行为
- android - Android ObjectBox.getAll() 返回 null,即使 objectBox.count 为 5
- c++ - C++ ofstream 无法从变量名打开文件(即使在使用 c_str() 之后也不行)
- node.js - 库后安装脚本在 Windows 上失败
- java - 为 Microprofile 嵌入的 TomEE arquillian
- javascript - JavaScript 返回 NaN 变量返回未定义
- c++ - 为什么一个大的比较变成了 1 行汇编代码?
- javascript - Javascript - 当用户单击警报按钮时提交 html 表单的 Onload 函数
- python - 在 Python 中遇到嵌套 if-eilf-else 语句的问题
- matlab - 使用 Matlab 绘制带有 XY 轴的函数