flutter实践 - flutter中的生命周期

Posted

tags:

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

参考技术A ios的ViewController、android的Activity一样,Flutter中的Widget也存在生命周期,并且通过State来提现。而App则是一个特殊的Widget,除了需要处理视图显示的各个阶段,还需要应对应用从启动到退出所经历的各个状态。

State的生命周期,指的是在用户参与的情况查下,其关联的Widget所经历的从创建到显示再到更新最后到停止,直至销毁的各个过程阶段。
这些不同的阶段涉及到的特定的任务处理,正确理解State的生命周期至关重要,State的生命周期流程图图,如下所示:

从图中可以看到,State的生命周期可以分为3个阶段:创建、更新、销毁。下面将介绍每一个阶段的具体流程

State初始化时会依次执行:构造方法 -> initState -> didChangeDependencies -> build,随后完成页面渲染

Widget的状态更新,主要由3个方法触发:setState、didChangeDependencies与didUpdateWidget。

一旦这三个方法被调用,Flutter就回销毁旧的Widget,并调用build方法重建Widget

组件销毁相对比较简单,组件被移除,或者页面销毁的时候,系统会调用deactivate和dispose这两个方法来移除或销毁组件

下面这张表格也可以帮助我们理解记忆这些调用实际

视图的生命周期,定义了视图的加载到构建的全过程,其回调机制能够确保我们可以更具视图的状态选择合适的时间做恰当的事情,而App的生命周期,则定义了App从启动到退出的全过程
在原生Android、iOS开发中,有时我们需要再对应的App生命周期事件中做相应的处理,比如App从后台进入前台,从前台退出后台,或者在UI绘制完成后做一些处理。
这样的需求,在原生开发中,可以通过重写Activity、ViewController生命周期回调方法,或者是注册应用程序的相关通知来兼容App的生命周期并做相应的处理。而在Flutter中,我们可以利用WidgetsBindingObserver类,来实现同样的需求。
下面我们看看WidgetsBindingObserver中具体有哪些回调函数:

didChangeAppLifecycleState回调函数中,有一个参数类型为AppLifecycleState的枚举类型,这个枚举类型是Flutter对App生命周期状态的封装,它的常用状态包括:

可以将App切前后台,控制台输出的App状态,可以发现:

我们可以通过下面的这张图直观的了解状态切换过程

除了需要监听App的生命周期回调做相应处理外,根据不同的需求,我们需要再组件宣讲之后做一些与显示安全相关的操作,在iOS中,可以通过GCD的方法,让操作在下一个RunLoop执行,在Android中,可以通过View.post()插入消息队列,来保证在组件渲染后进行相关操作。在Flutter中实现同样的需求会更简单:使用WidgetsBinding来实现即可
WidgetsBinding提供了单词Frame绘制回调和实时Frame绘制回调两种机制来满足不同的需求场景:

以上是关于flutter实践 - flutter中的生命周期的主要内容,如果未能解决你的问题,请参考以下文章

Flutter 中的生命周期分析

Flutter 中的生命周期

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

flutter 生命周期

Flutter生命周期

Flutter生命周期