11 | 提到生命周期,我们是在说什么?
该思维导图由 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-2324 - 这得从我捡到一个鼠标垫开始说起实际上打印监听的时候发现并不是文中所描述的那样。 从前台退居后台的时候执行inactive->paused 从后台进入前台的时候执行inactive->resumed paused和resumed不会同时执行,是不是文中有错? AppLifecycleState
作者回复: 你理解错了,我来帮你梳理下: 1.从前台退居后台,打印的是inactive->paused,但你忘了它之前的状态是resumed; 2.从后台进入前台,打印的是inactive->resumed,但你忘了它之前的状态是paused
2019-08-26317 - jia58960为啥navigator.push()之后当前的widget deactivate了还要build一次?对老师给的工程代码验证了确实是这样,还请老师解释下
作者回复: 因为State在视图树的相对位置变了
2019-07-2449 - Geek_b09541大牛,你好,我想买一本关于flutter的工具书,麻烦推荐一本
作者回复: 不推荐买书,如果想要快速了解一些核心Feature可以看看 官方的cookbook: https://flutter.dev/docs/cookbook和wendux写的Flutter实战:https://book.flutterchina.club/
2019-07-2429 - 离尘不离人คิดถึง`width WidgetsBindingObserver` 这里没看懂, 明明用的是 with `WidgetsBindingObserver`,但是代码却使用的是 `WidgetsBinding`,查看源码,发现 `WidgetsBindingObserver` 只是 `binding.dart` 里面的一个抽象类;老师这里能解答下吗
作者回复: WidgetsBinding是一个连接上层Widget回调与底层Flutter引擎实现的一个抽象胶水类,在不同的平台有不同的实现(比如在单元测试中是TestWidgetsFlutterBinding,在UI开发中是WidgetsFlutterBinding),所以我们需要在代码中用WidgetsBinding.instance获取特定的实例,而WidgetsBindingObserver只是一个接口而已
2019-10-1524 - 许童童老师你好,为什么项目启动时Resolving dependencies和Running Gradle task 'assembleDebug'阶段要很长的时间,大概2分钟。有什么办法可以加快速度吗?
作者回复: Gradle默认每次编译都会resolve dependencies,每次都会去进行网络请求。如果你那边访问jCenter很慢,这个步骤就卡住了。 你可以临时在Project Preferences的Gradle那里启用Offline work,不过新增依赖之后你需要在把这个设置改回来
2019-07-234 - Geek_60d7a7关于dart的mixin,老师能讲讲么,尤其是mixin on,看了好多资料都还不是很清晰…
作者回复: Mixin就是以非继承的方式实现代码复用的一种机制而已呀
2019-07-2423 - 承香墨影您好,有问题请教。 AppLifecycleState 中还有一个 suspending 的状态,这个状态表示什么意义?会在什么场景下触发?
作者回复: 表示程序被暂时挂起,这是操作系统底层暴露的状态,不是所有的平台都有(比如iOS就没有),所以这个状态可以理解成基本没用
2019-11-152 - Carlo除了需要监听 App 的生命周期回调做相应的处理之外,有时候我们还需要在组件渲染之后做一些与显示安全相关的操作。 能具体解释一下这个是什么意思么?比如说什么是显示安全相关的操作?
作者回复: 比如你要等界面上的某个元素出现之后,才认为视图渲染完成,就可以用这个机制。具体可以参考40节分享
2019-10-0922 - 咖啡凉了在iOS中,我们会用到viewWillAppear中实现方法刷新上一个页面的数据。Flutter中有类似的生命周期吗,怎么解决子页面数据提交后,返回到上一个页面刷新视图
作者回复: 参考21节“路由与导航”里面提到的页面关闭参数
2019-08-2621