Flutter 初探和認知

Flutter也比較熱,一套代碼統(tǒng)一移送端必定是趨勢,和React Native基于JS bridge調(diào)用Native端,HTML+JS的UI構(gòu)建邏輯,將復(fù)雜耗時的渲染交給系統(tǒng),解決webview性能問題不同,F(xiàn)lutter直接重寫一套跨平臺的UI框架,UI控件、渲染邏輯甚至開發(fā)語言。渲染引擎依靠跨平臺的Skia圖形庫來實現(xiàn),很大程度上解決RN帶來的不同平臺上的差異問題(目前一些大公司有棄用RN,因為RN在Android、iOS有些地方需要更多的兼容,反而帶來了更多的開發(fā)成本)

Flutter有點React的意思,虛擬DOM樹,管理數(shù)據(jù)流驅(qū)動視圖。也追風(fēng)看了Flutter文檔,我想目前大部分都是基于Native結(jié)合Flutter吧,F(xiàn)lutter可以直接打包AAR然后集成到現(xiàn)有原生App中了。

部門有幾個同事,項目的需要去接觸RN,去接觸后臺,去接觸不同的領(lǐng)域,經(jīng)過一兩個項目的完結(jié),均能很快上手去處理業(yè)務(wù)。自己也是需求去接觸了Angular,Ionic等,越加覺得語言沒想象中的那么重要,最多是比其他人更熟悉API,僅僅而已。仍需要不斷的挖掘其原理本質(zhì)。

下面國內(nèi)平臺對于Flutter的基于業(yè)務(wù)詳細解析:

1、詳看閑魚團隊-Flutter上的最后一公里

<1> 正如Flutter 和 React native在怎么花銷炫酷、在Native中都是一個View(Android)、ViewController(iOS)。Flutter和Native的混合開發(fā)帶來在Android端出現(xiàn)的混合棧問題(iOS有對外系統(tǒng)接口可以方便管理),需要統(tǒng)一管理Native,F(xiàn)lutter的跳轉(zhuǎn)交互。最終閑魚團隊的優(yōu)化方案,每次啟動Activity,通過復(fù)用一個FlutterView管理。

2、美團這篇還需要消化 Flutter的原理及美團的實踐

<1>Dart中類似線程的概念叫做Isolate,每個Isolate之間是無法共享內(nèi)存的,所以這種分配策略可以讓Dart實現(xiàn)無鎖的快速分配。多生代無鎖垃圾回收器。

<2>Dart的垃圾回收也采用了多生代算法,新生代在回收內(nèi)存時采用了“半空間”算法,觸發(fā)垃圾回收時Dart會將當(dāng)前半空間中的“活躍”對象拷貝到備用空間,然后整體釋放當(dāng)前空間的所有內(nèi)存。(不知道這個和jvm中新生代的復(fù)制清除有何區(qū)別?)

<3> Debug模式下Flutter使用JIT方式來執(zhí)行Dart代碼,所有的Dart代碼都會打包到APK文件中assets目錄下,由libflutter.so中提供的DartVM讀取并執(zhí)行:
Release模式(flutter run --release)下,F(xiàn)lutter會使用Dart的AOT運行模式,編譯時將Dart代碼轉(zhuǎn)換成ARM指令

<4>運行機制:默認情況下Flutter在Application#onCreate時調(diào)用FlutterMain#startInitialization來啟動解壓任務(wù),然后在FlutterActivityDelegate#onCreate中調(diào)用FlutterMain#ensureInitializationComplete來等待解壓任務(wù)結(jié)束

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容