flutter widget生命周期(轉)


Widget 生命周期

  1. 一切皆widget
  2. StatelessWidget狀態不可變,通常用於那些狀態不變的控件
    無狀態的widget的生命周期方只有 createElement 和 build兩個生命周期方法
    注意:並不是寫了之后,就徹底無法改變, 通過狀態管理框架,依舊可使StatelessWidget發生改變
  3. StatefulWidget狀態,多個生命周期函數參與回調
    初始化時期 createState 和 initState
    更新時期 didChangeDependencies 、build 、didUpdateWidget
    銷毀時期 deactivate 和 dispose
  • initState 創建之初調用一次 類似於onCreate
  • didChangeDependencies 在initState之后調用,可以在這個方法中跨組件拿到數據
  • build 創建Widget的地方,在離開和回到頁面的時候都會調用
  • didUpdateWidget 當組件的狀態改變的時候就會調用,比如調用-了setState
  • deactivate 在離開和回到頁面的時候都會調用
  • dispose 銷毀的時候調用

三棵樹 (Widget Element RenderObject)

Flutter 的渲染流程
runApp(rootWidget),將rootWidget傳給rootElement,做為rootElement的子節點,生成Element樹,由Element樹生成Render樹
Widget:存放渲染內容、視圖布局信息,widget的屬性
Element:存放上下文,通過Element遍歷視圖樹,Element同時持有Widget和RenderObject
RenderObject:根據Widget的布局屬性進行layout,paint Widget傳入的內容

線程和異步

Dart是單線程模型,沒有線程的概念,只有isolate,每個isolate都是隔離的,並不會共享內存。
而一個Dart程序是在Main isolate的main函數開始 而在Main函數結束后,Main isolate線程開始一個一個(one by on e)的開始處理Event Queue中的每一個Event
Dart事件循環機制是由一個 消息循環(Event looper) 和兩個消息隊列:事件隊列(Event queue) 和 微任務隊列(Micro Task queue) 構成
消息循環的處理機制為

1是否有微任務隊列,如果有微任務,處理微任務,走2。如果沒有微任務,走3
2 微任務處理完成后,回來走1
3 是否有事件隊列,如果有事件隊列,處理事件,走4。如果沒有事件,走5
4 事件處理完成之后,回來走1
5 程序正常exit

參來源

https://juejin.im/post/5eccebdc6fb9a047ff1aa5da


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM