Flutter App 生命周期

WidgetsBindingObserver 这个类提供的回调函数非常丰富,常见的屏幕旋转、屏幕亮度、语言变化、内存警告都可以通过这个实现进行回调。

直接看下源码

abstract class WidgetsBindingObserver {
//页面pop
  Future<bool> didPopRoute() => Future<bool>.value(false);
//页面push
  Future<bool> didPushRoute(String route) => Future<bool>.value(false);
//系统窗口相关改变回调,如旋转
  void didChangeMetrics() { }
//文本缩放系数变化
  void didChangeTextScaleFactor() { }
//系统亮度变化
  void didChangePlatformBrightness() { }
//本地化语言变化
  void didChangeLocales(List<Locale> locale) { }
//App生命周期变化
  void didChangeAppLifecycleState(AppLifecycleState state) { }
//内存警告回调
  void didHaveMemoryPressure() { }
//Accessibility相关特性回调
  void didChangeAccessibilityFeatures() { }
}

只需要在主 State 添加此接口,在 State 对象被插入视图树的时候注册监听器,在State 对象被销毁的时候移除监听器

///State 的生命周期:创建(插入视图树)、更新(在视图树中存在)、销毁(从视图树中移除)。
class _MyAppState extends State<MyApp> with WidgetsBindingObserver {
  @override
  void initState() {
    super.initState();
    WidgetsBinding.instance.addObserver(this); //注册监听器
  }

  @override
  void dispose() {
    super.dispose();
    WidgetsBinding.instance.removeObserver(this); //移除监听器
  }
}

比如复写 didChangeAppLifecycleState 函数,可以监听 App 生命周期的变化。

  //App生命周期变化
  @override
  void didChangeAppLifecycleState(AppLifecycleState state) {
    super.didChangeAppLifecycleState(state);
  }

与 Android 生命周期部分相似:

resumed:可见的,并能响应用户的输入。

inactive:处在不活动状态,无法处理用户响应。

paused:不可见并不能响应用户的输入,但是在后台继续活动中。

 

从后台切入前台:

{msg=didChangeAppLifecycleState : AppLifecycleState.resumed}

Home 从前台退回后台:

{msg=didChangeAppLifecycleState : AppLifecycleState.inactive}
{msg=didChangeAppLifecycleState : AppLifecycleState.paused}

Back 退出

msg=didChangeAppLifecycleState : AppLifecycleState.inactive

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值