Flutter生命周期
Flutter跟安卓的Activity、iOS的ViewController一样拥有自己的生命周期, Flutter中一切都是Widget,渲染方式有点像H5的DOM树。
先看生命周期图:
Flutter生命周期可以分为3个阶段:
1、实例化组件并添加到树, 即Navigator.push;
2、状态变化,即打开新的widget或者依赖的上级widget发生变化;
3、从树中移除, 即Navigator.pop。
在Flutter中Widget都是不可变的, 但实际上需要根据对应的状态刷新Widget。 从而产生了StatelessWidget和StatefulWdiget, StatefulWidget是由2个对象Widget和State组成的。
为什么将State和Widget分开呢?
答案是性能, State管理状态(可以理解为Controller),Widget是UI(即View)。 根据状态变化每次生成Widget(即View)可以节省内存,即不必每次创建状态对象State。
构造函数:
同其它高级语言, 只执行一次;
initState:
插入到渲染树时调用,只执行一次。(类似Android Fragment的onCreateView函数)
didChangeDependencies:
1、在初始化initState后执行; 2、显示/关闭其它widget。 3、可执行多次;
didUpdateWidget:
上级节点rebuild widget时, 即上级组件状态发生变化时会触发子widget执行didUpdateWidget;
deative:
有点像Android的onStop函数, 在打开新的Widget或回到这个widget时会执行; 可执行多次;
dispose:
类似于Android的onDestroy, 在执行Navigator.pop后会调用该办法, 表示组件已销毁;
reassemble:
点击闪电会执行,只用于调试时的hot reload。 release版本不会执行该函数。
常见业务场景:
Widget A打开Widget B: Navigator.push(B)
B构造函数--->B initState--->B didChangeDependencies--->B build--->A deactive--->A didChangeDependencies.
Widget B退出: Navigator.pop
A deactive--->A didChangeDependencies--->A build--->B deactive--->B dispose
可以看出, Flutter打开、关闭Widget时跟安卓、iOS的时序一样, 都是先处理即将显示的界面。
activity生命周期和Flutter对应关系:
Flutter提供了WidgetsBindingObserver来监听AppLifecycleState, 而AppLifecycleState有4种状态:
1、 resumed 界面可见, 同安卓的onResume。
2、inactive界面退到后台或弹出对话框情况下, 即失去了焦点但仍可以执行drawframe回调;同安卓的onPause;
3、paused应用挂起,比如退到后台,失去了焦点且不会收到drawframe回调;同安卓的onStop;
4、suspending, iOS中没用,安卓里就是挂起,不会再执行drawframe回调;
下面是生命周期:
1、初次打开widget时,不执行AppLifecycleState的回调;
2、按home键或Power键, AppLifecycleState inactive---->AppLifecycleState pause
3、从后台到前台:AppLifecycleState inactive--->ApplifecycleState resumed
4、back键退出应用: AppLifecycleState inactive--->AppLifecycleState paused
class _MyHomePageState extends State<MyHomePage> with WidgetsBindingObserver {AppLifecycleState _lastLifecycleState;void dispose() {super.dispose();WidgetsBinding.instance.removeObserver(this);}@overridevoid initState() {super.initState();WidgetsBinding.instance.addObserver(this);}@overridevoid didChangeAppLifecycleState(AppLifecycleState state) {print(state);}...
}
如果还需要其它事件,则可以用EventChannel实现, 从而补全Flutter的生命周期。
Flutter生命周期相关推荐
- Flutter 生命周期管理,类似安卓onResume
发现Flutter生命周期不大符合自己的业务,想要安卓提供的onCreate onResume等相似的生命周期 在参考其他现有的生命周期管理插件后发现还存在部分问题,所以在第三方的基础上去实现生命周 ...
- flutter 生命周期详解
flutter 生命周期详解 简介 一.widget 生命周期 二.APP 生命周期 总结 简介 众所周知,程序是有生命周期的,那么flutter 的生命周期是什么呢? flutter 的生命周期大体 ...
- Flutter 生命周期
原文链接:https://blog.csdn.net/u011272795/article/details/82695920 前言:生命周期是一个组件加载到卸载的整个周期,熟悉生命周期可以让我们在合适 ...
- 详解 Flutter State 生命周期
一.说明 我们在开发 Android 或 iOS 中经常会用到页面的生命周期. Android Activity 生命周期: onCreate onStart onResume onPause onS ...
- flutter中的生命周期
前言 和其他的视图框架比如android的Activity一样,flutter中的视图Widget也存在生命周期,生命周期的回调函数提现在了State上面.理解flutter的生命周期,对我们写出一个 ...
- 【Flutter】Flutter 页面生命周期 ( 初始化期 | createState | initState | 更新期 | build | 销毁期 | dispose)
文章目录 一.Flutter 页面生命周期 1.StatelessWidget 组件生命周期函数 2.StatefulWidget 组件生命周期函数 二.StatefulWidget 组件生命周期 1 ...
- Flutter State 的生命周期
本文主要介绍类比 Android 和 iOS,了解 Flutter State 的生命周期. 从 Android 或 iOS 转到 Flutter 开发,最让人疑惑的是 Flutter 如何处理生命周 ...
- Flutter漫说:组件生命周期、State状态管理及局部重绘的实现(Inherit)
目录 生命周期 State改变时组件如何刷新 InheritedWidget InheritedModel InheritedNotifier Notifier 生命周期 flutter的生命周期其实 ...
- Flutter State生命周期 Flutter Widget生命周期 Flutter 应用程序生命周期
题记:不到最后时刻,千万别轻言放弃,无论结局成功与否,只要你拼博过,尽力过,一切问心无愧 在 Flutter应用程序中,生命周期涉及两个,一个是 Widget 的生命周期,一个是应用程序的生命周期,本 ...
- flutter 图解_Flutter 54: 图解基本生命周期
小菜使用 Flutter 这么长时间,并没有认真研究过 Flutter 的生命周期,今天小菜分几个场景学习一下 Flutter 的生命周期: 小菜借助 WidgetsBinding 通过观察和监听 d ...
最新文章
- MapXtreme 2005 学习心得 在地图上创建点/线并显示标注(五)
- 程序员开发进度太慢被告上法庭!公司索赔90万,拿出百度词条当证据
- [蓝桥杯][算法提高VIP]数组替换-模拟
- 欢迎来到Python循环小课堂
- 港股区块链板块持续上行,火币科技涨超50%
- 正式版的Linux Kernel 5.1来了,非LTS
- python 实现相关系数计算和检验
- 微信公众号消息模板——Java
- js正则校验 统一社会信用代码
- 在线 excel 产品技术调研
- 公司邮箱登录入口哪个方便,邮箱移动办公哪个最好用?
- python正版软件多少钱_正版数据库软件需要多少钱
- 如何构建VoIP来是实现电话诈骗之——Asterisk的设置
- 使用Python构建参数化FNN(一)——构建可自定义结构的FNN
- OPPO、华为、烽火、海能达、腾讯、阿里、德昌面试经验
- 3款大数据bi工具,让企业数据分析更简单
- 关于Zoom连不了,明明别人可以连接,却提示会议号不存在
- Wave Driver介绍-7(驱动中对音量的控制操作-非硬件音量控制)
- Physical implementation —— LEF and DEF
- html+css+js 制作 PC 端酷狗音乐网页
热门文章
- 天正双击墙体不能编辑_如何提高天正CAD画图速度?不妨试试以下几个技巧
- Freesurfer学习笔记——Introduction to Freesurfer Output(输出简介)
- 利用树莓派组建支持迅雷离线下载的NAS
- 使用Kotlin语言两年后,我有话要说
- 如何在Coldfusion中上传文件
- 电脑只能上qq不能打开网页
- 工程初始化:报错... ...is exceeding the 65535 bytes limit
- 对往届软件工程的思考——写在软件工程开课之际 by 姜健
- PHP编程学习之路 2
- RabbitMQ延迟队列