首页 > 解决方案 > 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);
        })();
      }
    } 

标签: flutterdisposelifecycle

解决方案


我不确定您是否可以在应用程序完全关闭后运行任何代码,除非您将后台任务作为隔离启动:https ://flutter.io/docs/development/packages-and-plugins/background-processes 。


推荐阅读