flutter

Flutter 生命周期

2019-12-10  本文已影响0人  总会颠沛流离
image

基本场景的使用:

1:初始化

initState ==========>didChangeDependencies========>build

image
2:初始化

小菜尝试页面按钮点击弹框处理,均不会涉及生命周期变化,只是在build
更新Widget 资源 ;但若进行热加载生命周期如下:

reassemble -> didUpdateWidget -> build

image.png
3:横竖屏的切换

didUpdateWidget -> build -> didUpdateWidget -> build (执行两次)

4:切换后台

didChangeAppLifecycleState(AppLifecycleState.inactive) -> didChangeAppLifecycleState(AppLifecycleState.paused) -> build

image.png
5:切换前台

didChangeAppLifecycleState(AppLifecycleState.inactive) -> didChangeAppLifecycleState(AppLifecycleState.resumed) -> build


image.png
6. 销毁页面

deactivate -> dispos

image.png

7. 打开新的页面

新页面initState -> didChangeDependencies -> build -> 旧页面deactivate -> didChangeDependencies -> build (新页面初始化+旧页面置于后台)


image.png

8. 新页面切至后台(旧页面未销毁)

旧/新页面didChangeAppLifecycleState(AppLifecycleState.inactive) -> didChangeAppLifecycleState(AppLifecycleState.paused) -> build

image

9. 新页面切回前台

旧/新页面didChangeAppLifecycleState(AppLifecycleState.inactive) -> didChangeAppLifecycleState(AppLifecycleState.resumed) -> build

image

10. 新页面销毁

旧页面deactivate -> build(AppLifecycleState.resumed) -> 新页面deactivate -> dispose

image
  1. 进入分屏窗口
    didChangeAppLifecycleState(AppLifecycleState.inactive) -> didChangeAppLifecycleState(AppLifecycleState.paused) -> build (与切至后台相同)
image.png image.png
  1. 进行分屏
    didChangeAppLifecycleState(AppLifecycleState.inactive) -> didChangeAppLifecycleState(AppLifecycleState.resumed) -> didChangeAppLifecycleState(AppLifecycleState.inactive) -> build
image.png
image.png

13. 获取焦点

didChangeAppLifecycleState(AppLifecycleState.resumed) -> build

image
14. 屏幕大小调整

与 Android 不同,调整屏幕大小不会进行生命周期变化,前提是当前应用已获取焦点,若未获取焦点,则会在调整屏幕大小为全屏时进行获取焦点的生命周期方法;

总结

1`: 生命周期整体分为三个部分:初始化 / 状态改变 / 销毁;
2:initState 在整个生命周期中的初始化阶段只会调用一次
3:didChangeDependencies 当 State 对象依赖发生变动时调用;
4:didUpdateWidget 当 Widget 状态发生改变时调用;实际上每次更新状态时,Flutter 会创建一个新的 Widget,并在该函数中进行新旧 Widget 对比;一般调用该方法之后会调用 build;
5:reassemble 只有在 debug 或 热重载 时调用;
6:deactivate 从 Widget Tree 中移除 State 对象时会调用,一般用在 dispose 之前;
7:dispose 用于 Widget 被销毁时,通常会在此方法中移除监听或清理数据等,整个生命周期只会执行一次;
8:resumed 应用程序可见且获取焦点状态,类似于 Android onResume();
9:inactive 应用程序处于非活动状态;
10:paused 应用程序处于用户不可见,不响应用户状态,处于后台运行状态,类似于 Android onPause();

image.png
上一篇下一篇

猜你喜欢

热点阅读