Flutter 54: 圖解基本生命周期

??????小菜使用 Flutter 這么長時間筒繁,并沒有認真研究過 Flutter 的生命周期噩凹,今天小菜分幾個場景學習一下 Flutter 的生命周期;

??????小菜借助 WidgetsBinding 通過觀察和監(jiān)聽 didChangeAppLifecycleState 來分析生命周期事件毡咏,與 Android 原生類似驮宴;

基本場景

1. 初始化

initState -> didChangeDependencies -> build

2. 頁面數(shù)據(jù)更新

??????小菜嘗試頁面按鈕點擊或彈框處理,均不會涉及生命周期變化呕缭,只是在 build 更新 Widget 資源堵泽;但是若進行 熱重載 生命周期如下:

reassemble -> didUpdateWidget -> build

3. 橫豎屏切換

didUpdateWidget -> build -> didUpdateWidget -> build (執(zhí)行兩次)

4. 切至后臺

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

5. 切回前臺

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

6. 銷毀頁面

deactivate -> dispose

進階場景

7. 打開新的頁面

新頁面initState -> didChangeDependencies -> build -> 舊頁面deactivate -> didChangeDependencies -> build (新頁面初始化+舊頁面置于后臺)

8. 新頁面切至后臺(舊頁面未銷毀)

舊/新頁面didChangeAppLifecycleState(AppLifecycleState.inactive) -> didChangeAppLifecycleState(AppLifecycleState.paused) -> build

9. 新頁面切回前臺

舊/新頁面didChangeAppLifecycleState(AppLifecycleState.inactive) -> didChangeAppLifecycleState(AppLifecycleState.resumed) -> build

10. 新頁面銷毀

舊頁面deactivate -> build(AppLifecycleState.resumed) -> 新頁面deactivate -> dispose

特殊場景

??????小菜也嘗試了一下 Android7.0 分屏情況下的生命周期;

11. 進入分屏窗口

didChangeAppLifecycleState(AppLifecycleState.inactive) -> didChangeAppLifecycleState(AppLifecycleState.paused) -> build (與切至后臺相同)

12. 進行分屏

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

13. 獲取焦點

didChangeAppLifecycleState(AppLifecycleState.resumed) -> build

14. 屏幕大小調(diào)整

??????與 Android 不同恢总,調(diào)整屏幕大小不會進行生命周期變化迎罗,前提是當前應用已獲取焦點,若未獲取焦點片仿,則會在調(diào)整屏幕大小為全屏時進行獲取焦點的生命周期方法纹安;

小總結

  1. 生命周期整體分為三個部分:初始化 / 狀態(tài)改變 / 銷毀
  2. initState 在整個生命周期中的初始化階段只會調(diào)用一次砂豌;
  3. didChangeDependenciesState 對象依賴發(fā)生變動時調(diào)用厢岂;
  4. didUpdateWidgetWidget 狀態(tài)發(fā)生改變時調(diào)用;實際上每次更新狀態(tài)時阳距,Flutter 會創(chuàng)建一個新的 Widget塔粒,并在該函數(shù)中進行新舊 Widget 對比;一般調(diào)用該方法之后會調(diào)用 build筐摘;
  5. reassemble 只有在 debug熱重載 時調(diào)用卒茬;
  6. deactivateWidget Tree 中移除 State 對象時會調(diào)用映跟,一般用在 dispose 之前;
  7. dispose 用于 Widget 被銷毀時扬虚,通常會在此方法中移除監(jiān)聽或清理數(shù)據(jù)等努隙,整個生命周期只會執(zhí)行一次;
  8. resumed 應用程序可見且獲取焦點狀態(tài)辜昵,類似于 Android onResume()荸镊;
  9. inactive 應用程序處于非活動狀態(tài);
  10. paused 應用程序處于用戶不可見堪置,不響應用戶狀態(tài)躬存,處于后臺運行狀態(tài),類似于 Android onPause()舀锨;

??????生命周期非常重要也非常有趣岭洲,值得我們多多嘗試和研究,小菜僅嘗試了幾種常見的情況坎匿,如有錯誤請多多指導盾剩!

來源:阿策小和尚

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市替蔬,隨后出現(xiàn)的幾起案子告私,更是在濱河造成了極大的恐慌,老刑警劉巖承桥,帶你破解...
    沈念sama閱讀 218,546評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件驻粟,死亡現(xiàn)場離奇詭異,居然都是意外死亡凶异,警方通過查閱死者的電腦和手機蜀撑,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來剩彬,“玉大人酷麦,你說我怎么就攤上這事〗笏ィ” “怎么了贴铜?”我有些...
    開封第一講書人閱讀 164,911評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長瀑晒。 經(jīng)常有香客問我,道長徘意,這世上最難降的妖魔是什么苔悦? 我笑而不...
    開封第一講書人閱讀 58,737評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮椎咧,結果婚禮上玖详,老公的妹妹穿的比我還像新娘把介。我一直安慰自己,他們只是感情好蟋座,可當我...
    茶點故事閱讀 67,753評論 6 392
  • 文/花漫 我一把揭開白布拗踢。 她就那樣靜靜地躺著,像睡著了一般向臀。 火紅的嫁衣襯著肌膚如雪巢墅。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,598評論 1 305
  • 那天券膀,我揣著相機與錄音君纫,去河邊找鬼。 笑死芹彬,一個胖子當著我的面吹牛蓄髓,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播舒帮,決...
    沈念sama閱讀 40,338評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼会喝,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了玩郊?” 一聲冷哼從身側響起好乐,我...
    開封第一講書人閱讀 39,249評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎瓦宜,沒想到半個月后蔚万,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,696評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡临庇,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,888評論 3 336
  • 正文 我和宋清朗相戀三年反璃,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片假夺。...
    茶點故事閱讀 40,013評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡淮蜈,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出已卷,到底是詐尸還是另有隱情梧田,我是刑警寧澤,帶...
    沈念sama閱讀 35,731評論 5 346
  • 正文 年R本政府宣布侧蘸,位于F島的核電站裁眯,受9級特大地震影響,放射性物質發(fā)生泄漏讳癌。R本人自食惡果不足惜穿稳,卻給世界環(huán)境...
    茶點故事閱讀 41,348評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望晌坤。 院中可真熱鬧逢艘,春花似錦旦袋、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,929評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至央拖,卻和暖如春祭阀,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背爬泥。 一陣腳步聲響...
    開封第一講書人閱讀 33,048評論 1 270
  • 我被黑心中介騙來泰國打工柬讨, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人袍啡。 一個月前我還...
    沈念sama閱讀 48,203評論 3 370
  • 正文 我出身青樓踩官,卻偏偏與公主長得像,于是被迫代替她去往敵國和親境输。 傳聞我的和親對象是個殘疾皇子蔗牡,可洞房花燭夜當晚...
    茶點故事閱讀 44,960評論 2 355

推薦閱讀更多精彩內(nèi)容

  • Flutter 中的生命周期 flutter 也有自己的生命周期,但跟 Android 比起來就顯得弱化了,官方定...
    wethereornot閱讀 8,307評論 3 3
  • Flutter跟安卓的Activity嗅剖、iOS的ViewController一樣擁有自己的生命周期辩越, Flutte...
    三也視界閱讀 58,460評論 3 30
  • 項目地址:https://github.com/Code-Yeong/FlutterDemo 1黔攒、引言 在開發(fā)fl...
    看不見的手_閱讀 1,549評論 1 5
  • 本來,覺得很不公平强缘。 憑什么好人成佛督惰,需要歷經(jīng)九九八十一難;而壞人旅掂,只需放下屠刀赏胚。 后來真正平息憤懣,仔細思考這個...
    丹心明月_LM閱讀 252評論 0 2
  • 今天媽媽過生日商虐,一早起來我就和媽媽說生日快樂觉阅,媽媽的心情很美麗,中午回家后看到了我和爸爸為她準備的禮物秘车,心情...
    6ea93bce25e9閱讀 187評論 0 0