4.Flutter生命周期与路由管理

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了4.Flutter生命周期与路由管理相关的知识,希望对你有一定的参考价值。

参考技术A flutter也有自己的生命周期,不像android中Application、Activity、Fragment生命周期分得这么明细,flutter中只在StatefulWidget维护的State中维护了5个生命周期函数(可用于App中的页面跳转,相当于Android中View的生命周期)。而Activity中的生命周期可以通过实现WidgetsBindingObserver 接口,在didChangeAppLifecycleState()中获取状态回调。

initState()-->didChangeDependencies()-->deactivate()-->dispose() didUpdateWidge()

1.Widget A打开Widget B: 调用 Navigator.push(B)

2.Widget B从Widget A退出: 调用Navigator.pop()

可以看出, Flutter打开、关闭Widget时跟安卓、ios的时序一样, 都是先处理即将显示的界面。

Flutter提供了WidgetsBindingObserver来监听AppLifecycleState, 而AppLifecycleState有4种状态:

1、 resumed 界面可见, 同安卓的onResume。

2、inactive界面退到后台或弹出对话框情况下, 即失去了焦点但仍可以执行drawframe回调;同安卓的onPause;

3、paused应用挂起,比如退到后台,失去了焦点且不会收到 drawframe 回调;同安卓的onStop;

4、suspending, iOS中没用,安卓里就是挂起,不会再执行 drawframe 回调;

5、关于drawframe回调:Vsync信号到来之后,Engin会按顺序回调 window 的两个回调函数: onBeginFrame() 和 onDrawFrame() 。这两个回调是 SchedulerBinding 初始化的时候设置给 window 的。对应的是 SchedulerBinding.handleBeginFrame() 和 SchedulerBinding.handleDrawFrame() 。

应用场景:
1、初次打开widget时,不执行AppLifecycleState的回调;

2、按home键或Power键, AppLifecycleState inactive---->AppLifecycleState pause

3、从后台到前台:AppLifecycleState inactive--->ApplifecycleState resumed

4、back键退出应用: AppLifecycleState inactive--->AppLifecycleState paused

以上是关于4.Flutter生命周期与路由管理的主要内容,如果未能解决你的问题,请参考以下文章

vue中动态路由组件缓存及生命周期函数

☆Django☆---表的设计 生命周期 分组 解析 路由层 视图层

vue keepalive 路由守卫 生命周期等问题

Vue_03 vue的生命周期组件插槽Slot路由Router

项目管理概念||项目生命周期&项目阶段

微信小程序--路由变化对页面生命周期的影响