一、State生命周期
001 State的生命周期,指的是在用户参与的情况下,其关联的Widget所经历的,从创建到显示再到更新到停止,直至销毁的各个过程阶段。
创建(插入视图)、更新视图(在视图中存在),销毁(在视图中移除)
创建:构造方法-initState-didChangeDependencies-build
构造方法:createState()来创建一个State,接受父widget传递的初始化UI配置数据,这些数据决定了Widget最初的呈现效果。
initState:会在State对象被插入视图树的时候调用。在state生命周期中只会被调用一次,会做一些初始化工作。
didChangeDependencies:专门来处理State对象依赖关系在initState调用结束后被flutter调用,
build:作用构建视图。需要在这个函数中返回一个widget。关键词是child。
更新:setState、didchangeDependencies 与 didUpdateWidget
setState:当状态数据发生变化时,通过这个方法告诉flutter去重建UI
didchangeDependencies:state对象的依赖关系发生变化后,flutter会回调这个方法,随后触发组建构建,例如系统语言Locale 或者应用主题改变时。
didUpdateWidget:当widget配置发生变化时,hot-reload系统会调用这个函数
一旦调用这三个方法,flutter会销毁老的widget并调用build方法重建
销毁:deactivate和dispose
deactivate:当组建的可见状态发生变化时,deactivate会被调用,这是state会被暂时从视图树中移除,当页面切换时,由于State对象在视图中的位置发生的变化,需要先暂时移除后再重新添加,重新触发组建构建,因此这个函数也会被调用。
dispose:当state被永久从视图树中移除,这个阶段可以释放资源,移除监听,清理环境等等。
二、App生命周期
App生命周期定义了app从启动到退出的全过程。可用WidgetsBindingObserver来鉴定
后台到前台:paused-inactive-resumed
前台到后台:resumed-inactive-paused
在 iOS 开发中,我们可以通过 dispatch_async(dispatch_get_main_queue(),^{…}) 方法,让操作在下一个 RunLoop 执行
在flutter中如何实现呢?WidgetsBinding来实现
单次 Frame 绘制回调用addPostFrameCallback实现;实时addPersistentFrameCallback
WidgetsBinding.instance.addPersistentFrameCallback((_){
print("实时Frame绘制回调");//每帧都回调
});
WidgetsBinding.instance.addPostFrameCallback((_){
print("单次Frame绘制回调");//只回调一次
});