概念
Flutter是一個移動應用程序的軟件開發工具包(SDK),具有以下特征:
- 跨平台應用的框架,沒有使用WebView或者系統平台自帶的控件,使用自身的高性能渲染引擎自繪
- 簡化版的浏覽器,最大限度在android和ios上統一UI,包括業務邏輯和用戶體驗
- 開發語言使用dart,結合C, C , 和Skia(2D渲染引擎)構建
- 支持hot reload,包含着完整的控件和工具鍊
- 一切皆控件,控件是每個Flutter應用程序的基本構建塊,與分離視圖、控制器、布局和其他屬性的框架不同,Flutter具有一緻的統一對象模型:控件。一個控件可以定義:結構元素(比如按鈕或菜單)、風格元素(比如字體或顔色方案)、布局的方面(比如填充)、一些業務邏輯等
- 組合大于繼承,控件本身通常由許多小型、單用途的控件組成,結合起來産生強大的效果,類的層次結構是扁平的,以最大化可能的組合數量
- 強化版的WebView,框架僅提供一個View層,大部分功能要依賴原生
- 目前隻能夠運行大部分Dart代碼(不能引入dart:mirrors或dart:html庫)
優勢
宏觀上:
- 對于用戶,Flutter能夠提供優美的UI和流暢的使用體驗
- 對于開發者,Flutter降低了開發App的門檻,加速移動應用的開發速度,并且能夠降低同時開發Android和iOS應用的成本和複雜度
- 對于設計者,Flutter能夠輕松做出原型并且能夠保持相當高還原度
- 微觀上:
- 高效率,用一套代碼庫就能開發iOS和Android應用
- 使用新型的、表現力強的語言和聲明式的方法,用更少的代碼來做更多的事情
- 可以在應用程序運行時更改代碼并重新加載查看效果,也就是熱重新加載
- 修複崩潰時可以從應用程序停止的位置繼續調試
- 創建美觀、高度定制的用戶體驗
- Flutter框架内置了一組豐富的質感設計控件
- 實現定制、美觀、品牌驅動的設計,而不受OEM控件集的限制
- 深度優化,移動優先的2D渲染引擎而且對文本支持非常出色
- react風格的框架
- 支持單元和集成測試的API
- 支持與系統平台和第三方SDK交互的插件API
- 支持Windows,Mac和Linux的Headless test runner
- 支持創建,構建,測試和編譯應用的命令行工具
運行機制
Flutter 應用運行在一個用 C 寫的引擎中,Flutter 應用可以看做是一個遊戲 App,代碼都是在引擎中運行。
引擎的C或C 代碼是由Android NDK編譯的,而框架的主要代碼和應用的代碼由Dart compiler編譯成native code執行的。
對于Android應用來說,Flutter框架在引擎中實現了一個繼承于SurfaceView的 FlutterView。用戶所看到的UI都是在這個SurfaceView中顯示。如果要和原生平台功能交互,則可以在Activity中使用FlutterView,并通過Flutter提供的消息API和原生平台收發消息。
引擎的C或C 代碼是由LLVM編譯的,而所有Dart的代碼會被AOT編譯成native code,整個APP運行時使用的是機器指令(并不是攔截器)。
系統架構
繪制流程
界面的布局和繪制在每一幀都在發生着,甚至界面沒有變化,它也會存在;可以想象每一幀裡面,引擎都像流水線的一樣重複着幾個過程:build(構建控件樹),layout(布局), paint(繪制)和 composite(合成),周而複始。驅動整個流水線的入口是WidgetBinding.drawFrame方法。
根據parent給予的約束條件來計算size,而設置size隻能在performResize或者performLayout中進行,如果設置sizedByParent為true,則隻能在performResize中進行,否則就隻能在performLayout中與child的布局同時進行。
關于Flutter的大廠精選面試題(部分)- dart是值傳遞還是引用傳遞
- Jvm虛拟機
- messageQueue會不會阻塞ui線程
- 對象鎖和類鎖
- 之字形打印樹
- Widget和element和RenderObject之間的關系
- widget的root節點
- mixin extends implement之間的關系
- jvm内存模型
- Future和microtask執行順序
- dart中..的用法
- await for
題外話,我在三星小米工作多年,深知技術改革和創新的方向,Android開發以其美觀、快速、高效、開放等優勢迅速俘獲人心,但很多Android興趣愛好者所需的進階學習資料确實不太系統,完整。今天我把我搜集和整理的這份學習資料分享給有需要的人,若有關Android學習進階可以與我在Android終極開發交流群一起讨論交流。由于篇幅問題需要Flutter相關學習進階資料以及上面Flutter問題答案的可以私信我【Flutter】,我免費分享給大家。領取資料的同時,還可以加入一個好的學習交流圈,何樂而不為呢?加入我們和我們一起吧!!
- Android高級工程師Flutter系統學習知識體系
對标阿裡P7 Flutter進階學習必備知識
, 更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!