基本場景的使用:
1:初始化
initState ==========>didChangeDependencies========>build
2:初始化
小菜嘗試頁面按鈕點(diǎn)擊彈框處理润脸,均不會(huì)涉及生命周期變化,只是在build
更新Widget 資源 ;但若進(jìn)行熱加載生命周期如下:
reassemble -> didUpdateWidget -> build
3:橫豎屏的切換
didUpdateWidget -> build -> didUpdateWidget -> build (執(zhí)行兩次)
4:切換后臺(tái)
didChangeAppLifecycleState(AppLifecycleState.inactive) -> didChangeAppLifecycleState(AppLifecycleState.paused) -> build
5:切換前臺(tái)
didChangeAppLifecycleState(AppLifecycleState.inactive) -> didChangeAppLifecycleState(AppLifecycleState.resumed) -> build
image.png
6. 銷毀頁面
deactivate -> dispos
7. 打開新的頁面
新頁面initState -> didChangeDependencies -> build -> 舊頁面deactivate -> didChangeDependencies -> build (新頁面初始化+舊頁面置于后臺(tái))
8. 新頁面切至后臺(tái)(舊頁面未銷毀)
舊/新頁面didChangeAppLifecycleState(AppLifecycleState.inactive) -> didChangeAppLifecycleState(AppLifecycleState.paused) -> build
9. 新頁面切回前臺(tái)
舊/新頁面didChangeAppLifecycleState(AppLifecycleState.inactive) -> didChangeAppLifecycleState(AppLifecycleState.resumed) -> build
10. 新頁面銷毀
舊頁面deactivate -> build(AppLifecycleState.resumed) -> 新頁面deactivate -> dispose
- 進(jìn)入分屏窗口
didChangeAppLifecycleState(AppLifecycleState.inactive) -> didChangeAppLifecycleState(AppLifecycleState.paused) -> build (與切至后臺(tái)相同)
- 進(jìn)行分屏
didChangeAppLifecycleState(AppLifecycleState.inactive) -> didChangeAppLifecycleState(AppLifecycleState.resumed) -> didChangeAppLifecycleState(AppLifecycleState.inactive) -> build
13. 獲取焦點(diǎn)
didChangeAppLifecycleState(AppLifecycleState.resumed) -> build
14. 屏幕大小調(diào)整
與 Android 不同芝加,調(diào)整屏幕大小不會(huì)進(jìn)行生命周期變化育瓜,前提是當(dāng)前應(yīng)用已獲取焦點(diǎn)喝检,若未獲取焦點(diǎn)娄帖,則會(huì)在調(diào)整屏幕大小為全屏?xí)r進(jìn)行獲取焦點(diǎn)的生命周期方法季蚂;
總結(jié)
1`: 生命周期整體分為三個(gè)部分:初始化 / 狀態(tài)改變 / 銷毀勿决;
2:initState 在整個(gè)生命周期中的初始化階段只會(huì)調(diào)用一次
3:didChangeDependencies 當(dāng) State 對象依賴發(fā)生變動(dòng)時(shí)調(diào)用乒躺;
4:didUpdateWidget 當(dāng) Widget 狀態(tài)發(fā)生改變時(shí)調(diào)用;實(shí)際上每次更新狀態(tài)時(shí)低缩,F(xiàn)lutter 會(huì)創(chuàng)建一個(gè)新的 Widget嘉冒,并在該函數(shù)中進(jìn)行新舊 Widget 對比;一般調(diào)用該方法之后會(huì)調(diào)用 build咆繁;
5:reassemble 只有在 debug 或 熱重載 時(shí)調(diào)用讳推;
6:deactivate 從 Widget Tree 中移除 State 對象時(shí)會(huì)調(diào)用,一般用在 dispose 之前玩般;
7:dispose 用于 Widget 被銷毀時(shí)银觅,通常會(huì)在此方法中移除監(jiān)聽或清理數(shù)據(jù)等,整個(gè)生命周期只會(huì)執(zhí)行一次坏为;
8:resumed 應(yīng)用程序可見且獲取焦點(diǎn)狀態(tài)究驴,類似于 Android onResume()镊绪;
9:inactive 應(yīng)用程序處于非活動(dòng)狀態(tài);
10:paused 應(yīng)用程序處于用戶不可見洒忧,不響應(yīng)用戶狀態(tài)蝴韭,處于后臺(tái)運(yùn)行狀態(tài),類似于 Android onPause()熙侍;