flutter - State.dispose() 从未调用过
问题描述
我正在尝试在调用 dispose() 方法时运行 AlarmManager。但看起来 dispose() 从未被调用过。我没有得到任何输出日志,并且调试器不会在此方法中中断。何时应调用 dispose()。当我点击 BACK/HOME 按钮(onStop() 等效项)时,还是仅当应用程序被系统杀死时?我想在应用程序完全关闭时运行 AlarmManager。
在 Flutter 中这样做是否正确?
class MyApp extends StatefulWidget {
@override
MyAppState createState() {
return new MyAppState();
}
}
class MyAppState extends State<MyApp> {
MailSenderController controller = MailSenderController(...);
@override
void initState() {
super.initState();
controller.init();
}
@override
void dispose() {
log.info("Disposing MailSenderController"); // All levels, print(rec.message)
controller.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return ServicesInheritedWidget(
controller,
child: MaterialApp(
title: 'Mail Sender',
home: MyHomePage(title: 'Mail Sender'),
),
);
}
}
class MailSenderController {
// (...)
void dispose() {
(() async {
await sendDelayedSubscription?.cancel();
log.info("AndroidAlarmManager sending");
AndroidAlarmManager.periodic(_DELAY_LONG,
_ALARM_MANAGER_ID,
alarmManagerSendMails,
rescheduleOnReboot: true);
})();
}
}
解决方案
我不确定您是否可以在应用程序完全关闭后运行任何代码,除非您将后台任务作为隔离启动:https ://flutter.io/docs/development/packages-and-plugins/background-processes 。
推荐阅读
- java - 单击后更改形状和颜色(GUI、Java)
- django - webRTC ondatachannel() 和 onopen() 事件监听器未触发
- cytoscape.js - Cytoscape GEM 文件创建未标记的方形节点而不是标记的圆形节点
- sql - 从 orderDate SQL 获取年、季
- visual-studio-code - VsCode 有线智能在单击时发出重复文本
- django - 我尝试测试但有导入测试错误,那么问题是什么?
- javascript - 我想要我的
在 CSS 中 5 秒后显示的标签
- java - 如何在 spring-boot config-server 中为 git repo 配置后备 uri
- java - 媒体存储在哪些文件夹中收集文件?
- scala - 参数解构