Flutter 核心技术与实战
陈航
前美团点评高级技术专家
42432 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 48 讲
Flutter 核心技术与实战
15
15
1.0x
00:00/00:00
登录|注册

11 | 提到生命周期,我们是在说什么?

思考题
App生命周期
State生命周期
总结

该思维导图由 AI 生成,仅供参考

你好,我是陈航。今天,我要和你分享的主题是 Flutter 中的生命周期是什么。
在上一篇文章中,我们从常见的 StatefulWidget 的“万金油”误区出发,一起回顾了 Widget 的 UI 更新机制。
通过父 Widget 初始化时传入的静态配置,StatelessWidget 就能完全控制其静态展示。而 StatefulWidget,还需要借助于 State 对象,在特定的阶段来处理用户的交互或其内部数据的变化,并体现在 UI 上。这些特定的阶段,就涵盖了一个组件从加载到卸载的全过程,即生命周期。与 iOS 的 ViewController、Android 的 Activity 一样,Flutter 中的 Widget 也存在生命周期,并且通过 State 来体现。
而 App 则是一个特殊的 Widget。除了需要处理视图显示的各个阶段(即视图的生命周期)之外,还需要应对应用从启动到退出所经历的各个状态(App 的生命周期)。
对于开发者来说,无论是普通 Widget(的 State)还是 App,框架都给我们提供了生命周期的回调,可以让我们选择恰当的时机,做正确的事儿。所以,在对生命周期有了深入理解之后,我们可以写出更加连贯流畅、体验优良的程序。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

Flutter中的生命周期是指Widget和App从创建到销毁的全过程,通过State对象和WidgetsBindingObserver类来体现。State的生命周期包括创建、更新和销毁三个阶段,涉及到构造方法、initState、didChangeDependencies、build、setState、didUpdateWidget等方法的调用。而App的生命周期则定义了App从启动到退出的全过程,包括resumed、inactive、paused等状态。通过实际案例,文章详细介绍了State和App生命周期的回调机制和使用方法。 在Flutter中,通过WidgetsBinding提供的单次Frame绘制回调和实时Frame绘制回调机制,可以满足不同的需求。单次Frame绘制回调通过addPostFrameCallback实现,而实时Frame绘制回调则通过addPersistentFrameCallback实现,用于每次绘制Frame结束后进行回调,可用于FPS监测。 总结来说,本文详细介绍了Flutter中State和App的生命周期,以及帧绘制回调机制。读者可以通过深入理解生命周期,写出更加连贯流畅、体验优良的程序。文章还提出了两个思考题,引发读者思考和讨论。 通过对State生命周期的划分和WidgetsBinding提供的帧绘制回调机制的介绍,本文为读者提供了深入了解Flutter生命周期和回调机制的机会,有助于读者在实际开发中更好地控制Widget,写出合理的组件。 总体而言,本文内容丰富,涵盖了Flutter中State和App的生命周期以及帧绘制回调机制,对于想要深入了解Flutter技术特点的读者来说,是一篇值得阅读的文章。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Flutter 核心技术与实战》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(35)

  • 最新
  • 精选
  • 许童童
    在构造函数中Widget还未生成,所以只能做一些参数传入的处理,initState中可以做初始化State的变量的操作。

    作者回复: 赞

    2019-07-23
    24
  • 这得从我捡到一个鼠标垫开始说起
    实际上打印监听的时候发现并不是文中所描述的那样。 从前台退居后台的时候执行inactive->paused 从后台进入前台的时候执行inactive->resumed paused和resumed不会同时执行,是不是文中有错? AppLifecycleState

    作者回复: 你理解错了,我来帮你梳理下: 1.从前台退居后台,打印的是inactive->paused,但你忘了它之前的状态是resumed; 2.从后台进入前台,打印的是inactive->resumed,但你忘了它之前的状态是paused

    2019-08-26
    3
    17
  • jia58960
    为啥navigator.push()之后当前的widget deactivate了还要build一次?对老师给的工程代码验证了确实是这样,还请老师解释下

    作者回复: 因为State在视图树的相对位置变了

    2019-07-24
    4
    9
  • Geek_b09541
    大牛,你好,我想买一本关于flutter的工具书,麻烦推荐一本

    作者回复: 不推荐买书,如果想要快速了解一些核心Feature可以看看 官方的cookbook: https://flutter.dev/docs/cookbook和wendux写的Flutter实战:https://book.flutterchina.club/

    2019-07-24
    2
    9
  • 离尘不离人คิดถึง
    `width WidgetsBindingObserver` 这里没看懂, 明明用的是 with `WidgetsBindingObserver`,但是代码却使用的是 `WidgetsBinding`,查看源码,发现 `WidgetsBindingObserver` 只是 `binding.dart` 里面的一个抽象类;老师这里能解答下吗

    作者回复: WidgetsBinding是一个连接上层Widget回调与底层Flutter引擎实现的一个抽象胶水类,在不同的平台有不同的实现(比如在单元测试中是TestWidgetsFlutterBinding,在UI开发中是WidgetsFlutterBinding),所以我们需要在代码中用WidgetsBinding.instance获取特定的实例,而WidgetsBindingObserver只是一个接口而已

    2019-10-15
    2
    4
  • 许童童
    老师你好,为什么项目启动时Resolving dependencies和Running Gradle task 'assembleDebug'阶段要很长的时间,大概2分钟。有什么办法可以加快速度吗?

    作者回复: Gradle默认每次编译都会resolve dependencies,每次都会去进行网络请求。如果你那边访问jCenter很慢,这个步骤就卡住了。 你可以临时在Project Preferences的Gradle那里启用Offline work,不过新增依赖之后你需要在把这个设置改回来

    2019-07-23
    4
  • Geek_60d7a7
    关于dart的mixin,老师能讲讲么,尤其是mixin on,看了好多资料都还不是很清晰…

    作者回复: Mixin就是以非继承的方式实现代码复用的一种机制而已呀

    2019-07-24
    2
    3
  • 承香墨影
    您好,有问题请教。 AppLifecycleState 中还有一个 suspending 的状态,这个状态表示什么意义?会在什么场景下触发?

    作者回复: 表示程序被暂时挂起,这是操作系统底层暴露的状态,不是所有的平台都有(比如iOS就没有),所以这个状态可以理解成基本没用

    2019-11-15
    2
  • Carlo
    除了需要监听 App 的生命周期回调做相应的处理之外,有时候我们还需要在组件渲染之后做一些与显示安全相关的操作。 能具体解释一下这个是什么意思么?比如说什么是显示安全相关的操作?

    作者回复: 比如你要等界面上的某个元素出现之后,才认为视图渲染完成,就可以用这个机制。具体可以参考40节分享

    2019-10-09
    2
    2
  • 咖啡凉了
    在iOS中,我们会用到viewWillAppear中实现方法刷新上一个页面的数据。Flutter中有类似的生命周期吗,怎么解决子页面数据提交后,返回到上一个页面刷新视图

    作者回复: 参考21节“路由与导航”里面提到的页面关闭参数

    2019-08-26
    2
    1
收起评论
显示
设置
留言
35
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部