Flutter中的AppLifecycleListener:应用生命周期监听器介绍及使用

引言

当你在Flutter中需要监听应用程序的生命周期变化时,可以使用AppLifecycleListener。在Flutter 3.13中,AppLifecycleListener被添加到Framework中,用于监听应用程序的生命周期变化,并响应退出应用程序的请求等支持。

在Flutter 3.13之前,我们通常使用WidgetsBindingObserverdidChangeAppLifecycleState方法来实现生命周期的监听。但是,didChangeAppLifecycleState方法比较"粗暴",直接返回AppLifecycleState让用户自己处理。而AppLifecycleListener则是在WidgetsBindingObserver.didChangeAppLifecycleState的基础上进行了封装,再配合当前lifecycleState形成更完整的生命周期链条,对于开发者来说就是使用更方便,并且API相应更直观。

以下是一个简单的使用AppLifecycleListener的示例:

dart 复制代码
late final AppLifecycleListener _listener;
late AppLifecycleState? _state;

@override
void initState() {
  super.initState();
  _state = SchedulerBinding.instance.lifecycleState;
  _listener = AppLifecycleListener(
    onShow: () => _handleTransition('show'),
    onResume: () => _handleTransition('resume'),
    onHide: () => _handleTransition('hide'),
    onInactive: () => _handleTransition('inactive'),
    onPause: () => _handleTransition('pause'),
    onDetach: () => _handleTransition('detach'),
    onRestart: () => _handleTransition('restart'),
    // 每次状态改变都会触发。上面的回调只用于特定的状态转换。
    onStateChange: _handleStateChange,
  );
}

void _handleTransition(String name) {
  print("########################## main $name");
}

总结

  1. late AppLifecycleState? _state是一个实例变量,用于存储当前应用程序的生命周期状态。在上述示例中,_stateinitState()方法中被初始化为当前应用程序的生命周期状态,即SchedulerBinding.instance.lifecycleState。虽然在这个示例中没有使用_state,但是在其他的应用场景中,你可能需要使用它来记录应用程序的生命周期状态并在后续的处理中使用。
  2. AppLifecycleListener是一个完整的类,所以使用它无需使用mixin,你只需要在使用的地方创建一个AppLifecycleListener对象即可。AppLifecycleListener根据AppLifecycleState区分好了所有回调调用,调用编排更加直观。最后,AppLifecycleListener可以更方便地判断和记录整个生命周期的链条变化,因为它已经帮你封装好回调方法。
相关推荐
kkk_皮蛋几秒前
从零开始:用 Android Studio 开发一个 AI 智能日记 App
android·ide·android studio
庄雨山1 分钟前
Flutter 结合开源鸿蒙开发通用登录页面:从搭建到落地全解析
flutter·开源·openharmonyos
小a彤4 分钟前
Flutter 混合开发方案深度解析
flutter·macos·cocoa
kdniao116 分钟前
iOS应用集成物流API接口:架构设计、性能优化与用户体验实践指南
ios·性能优化·ux
2501_9160074717 分钟前
在 CICD 中实践 Fastlane + Appuploader 命令行,构建可复制的 iOS 自动化发布流程
android·运维·ios·小程序·uni-app·自动化·iphone
煤球王子38 分钟前
简单了解:Android14中的Input event
android
2501_915921431 小时前
从 HBuilder 到 App Store,uni-app 与 HBuilder 项目的 iOS 上架流程实战解析
android·ios·小程序·https·uni-app·iphone·webview
天向上1 小时前
ubuntu系统adb shell报错 ADB server didn‘t ACK
android·linux·ubuntu·adb
我心里危险的东西2 小时前
Hora Dart:我为什么从 jiffy 用户变成了新日期库的作者
前端·flutter·dart
xiaoyan20152 小时前
自研2025版flutter3.38实战抖音app短视频+聊天+直播商城系统
android·flutter·dart