1. 程式人生 > >Flutter 一點見解

Flutter 一點見解

  Flutter也比較熱,一套程式碼統一移送端必定是趨勢,和React Native基於JS bridge呼叫Native端,HTML+JS的UI構建邏輯,將複雜耗時的渲染交給系統,解決webview效能問題不同,Flutter直接重寫一套跨平臺的UI框架,UI控制元件、渲染邏輯甚至開發語言。渲染引擎依靠跨平臺的Skia圖形庫來實現,很大程度上解決RN帶來的不同平臺上的差異問題(目前一些大公司有棄用RN,因為RN在Android、iOS有些地方需要更多的相容,反而帶來了更多的開發成本)

  Flutter有點React的意思,虛擬DOM樹,管理資料流驅動檢視。也追風看了Flutter文件,我想目前大部分都是基於Native結合Fluter吧,Fluuter可以直接打包AAR然後整合到現有原生App中了。

  部門有幾個同事,專案的需要去接觸RN,去接觸後臺,去接觸不同的領域,經過一兩個專案的完結,均能很快上手去處理業務。自己也是需求去接觸了Angular,ionic等,越加覺得語言沒想象中的那麼重要,最多是比其他人更熟悉API,僅僅而已。仍需要不斷的挖掘其原理本質。

下面國內平臺對於Flutter的基於業務詳細解析:

  <1> 正如Flutter 和 React native在怎麼花銷炫酷、在Native中都是一個View(Android)、ViewController(iOS)。Flutter和Native的混合開發帶來在Android端出現的混合棧問題(iOS有對外系統介面可以方便管理),需要統一管理Native,Flutter的跳轉互動。最終閒魚團隊的優化方案,每次啟動Activity,通過複用一個FlutterView管理。

<1>Dart中類似執行緒的概念叫做Isolate,每個Isolate之間是無法共享記憶體的,所以這種分配策略可以讓Dart實現無鎖的快速分配。多生代無鎖垃圾回收器。

<2>Dart的垃圾回收也採用了多生代演算法,新生代在回收記憶體時採用了“半空間”演算法,觸發垃圾回收時Dart會將當前半空間中的“活躍”物件拷貝到備用空間,然後整體釋放當前空間的所有記憶體。(不知道這個和jvm中新生代的複製清除有何區別?)

<3> Debug模式下Flutter使用JIT方式來執行Dart程式碼,所有的Dart程式碼都會打包到APK檔案中assets目錄下,由libflutter.so中提供的DartVM讀取並執行:
Release模式(flutter run –release)下,Flutter會使用Dart的AOT執行模式

,編譯時將Dart程式碼轉換成ARM指令

<4>執行機制:預設情況下Flutter在Application#onCreate時呼叫FlutterMain#startInitialization來啟動解壓任務,然後在FlutterActivityDelegate#onCreate中呼叫FlutterMain#ensureInitializationComplete來等待解壓任務結束