轉(zhuǎn)載:https://blog.csdn.net/yoonerloop/article/details/121003373

image.png
一、生命周期階段
flutter生命周期大體上可以分為三個階段:初始化、狀態(tài)變化、銷毀。
- 初始化階段
對應(yīng)執(zhí)行構(gòu)造方法和initState時候 - 狀態(tài)變化階段
開新的widget或者調(diào)用setState方法的時候 - 銷毀階段
deactivate 和 dispose
二、生命周期階段執(zhí)行的函數(shù)
- initState
調(diào)用次數(shù):1次
插入渲染樹時調(diào)用,只調(diào)用一次,widget創(chuàng)建執(zhí)行的第一個方法,這里可以做一些初始化工作,比如初始化State的變量。
- didChangeDependencies
調(diào)用次數(shù):多次
初始化時,在initState()之后立刻調(diào)用
當(dāng)依賴的InheritedWidget rebuild,會觸發(fā)此接口被調(diào)用
實測在組件可見狀態(tài)變化的時候會調(diào)用 - build
調(diào)用次數(shù):多次
初始化之后開始繪制界面
setState觸發(fā)的時候會 - didUpdateWidget
調(diào)用次數(shù):多次
組件狀態(tài)改變時候調(diào)用 - deactivate
當(dāng)State對象從樹中被移除時,會調(diào)用此回調(diào),會在dispose之前調(diào)用。
頁面銷毀的時候會依次執(zhí)行:deactivate > dispose - dispose
調(diào)用次數(shù):1次
當(dāng)State對象從樹中被永久移除時調(diào)用;通常在此回調(diào)中釋放資源。 - reassemble
在熱重載(hot reload)時會被調(diào)用,此回調(diào)在Release模式下永遠(yuǎn)不會被調(diào)用
三、App生命周期
通過WidgetsBindingObserver的didChangeAppLifecycleState 來獲取。通過該接口可以獲取是生命周期在AppLifecycleState類中。
- resumed
可見并能響應(yīng)用戶的輸入,同安卓的onResume - inactive
處在并不活動狀態(tài),無法處理用戶響應(yīng),同安卓的onPause - paused
不可見并不能響應(yīng)用戶的輸入,但是在后臺繼續(xù)活動中,同安卓的onStop
下面是生命周期:
- 初次打開widget時,不執(zhí)行AppLifecycleState的回調(diào);
- 按home鍵或Power鍵, AppLifecycleState inactive---->AppLifecycleState pause
- 從后臺到前臺:AppLifecycleState inactive--->ApplifecycleState resumed
- back鍵退出應(yīng)用: AppLifecycleState inactive--->AppLifecycleState paused