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生命周期与路由管理的主要内容,如果未能解决你的问题,请参考以下文章
☆Django☆---表的设计 生命周期 分组 解析 路由层 视图层