flutter 学习笔记之生命周期

一、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绘制回调");//只回调一次
  });

三、参考原文

https://time.geekbang.org/column/article/109490

 

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值