Flutter系列(三) 整體架構

您好,歡迎關注我的專欄,本篇是關於 Flutter 系列的第三篇,從簡單的 Flutter 介紹開始,一步步帶你瞭解進入 Flutter 的世界。你最好有一定的移動開發經驗,如果沒有也不要擔心,在我的專欄底部給我留言,我會盡我的能力給你解答。

上篇文章我們介紹了用 Flutter 開發第一個跨平臺應用程序,相信大家一定印象深刻,本篇文章介紹 Flutter 平臺的整體架構。

一.核心原則

之前專欄有提到過,Flutter 的SDK中包括一個現代的響應式框架、一個2D渲染引擎、現成的widget和開發工具。這些組件可以幫助您快速地設計、構建、測試和調試應用程序。

一切皆 Widget
在Flutter中,所有的界面元素全部是Widget,不管是View也好,容器也好,窗體也好,還是佈局也好,全部都是Wiget!

組合大於繼承
還是那句話,在Flutter中,所有的界面元素全部是Widget。無論多複雜的Widget都是由無數個子Widget構成。你可以任意搭配Widget從而組裝成強大的Widget。

分層的框架
Flutter框架是一個分層的結構,每個層都建立在前一層之上。
Flutter系列(三) 整體架構

二.整體架構

引擎層

Flutter引擎層由Skia/Dart/Text三個部分構成,這一塊使用C++開發。
Skia
skia是個2D向量圖形處理函數庫,包含字型、座標轉換,以及點陣圖都有高效能且簡潔的表現。不僅用於Google Chrome瀏覽器,新興的Android開放手機平臺也採用skia作爲繪圖處理,搭配OpenGL/ES與特定的硬件特徵,強化顯示的效果。
Dart
引擎層的Dart包括Dart運行時環境和垃圾回收(GC),以及JIT(Just In Time)。

Text
文本渲染,採用libtxt庫實現文本的渲染。

框架層

Flutter框架層由Dart實現,簡單的分爲四個部分,從下至上分別是dart:ui層/Rendering層/Widgets層和Material(Cupertino)層。

dart:ui
提供Flutter框架和引擎層之間的接口。

Rendering
渲染/動畫/手勢處理

Widgets
文本/圖片/按鈕的基礎控件

Material/Cupertino

系統預製的Android/iOS風格控件。

這些層級爲構建應用提供了很多種選擇。使用自定義的方式構建應用可以使用框架的所有功能,或者使用 Widget 層的控件可以實現 UI 效果。 可以直接使用 Flutter 提供的 Widget 也可以自定義各種 Widget。如果上層實現不滿足你的要求,你可以直接使用更底層的功能來自定義。

三.Flutter框架優勢

Flutter真的很快,其誕生借鑑了很多其他平臺的優勢。

拿UI渲染層來說,所有的元素皆Widget,就連頁面跳轉都是Widget,因此無論是開發週期,開發難度還是對開發者素質要求而言都變得非常的簡單,不會由於Activity生命週期結束導致內存溢出等等。用開發者調試工具就可以看出來所有的界面在Android算做一個View,沒有層級的概念,因此渲染速度也是非常的快。

另外Flutter線程也很特別,與Java顯著不同的是Dart的"線程"(Isolate)是不共享內存的,各自的堆(Heap)和棧(Stack)都是隔離的,彼此之間通過消息通道來通信。所以,Dart不存在數據競爭和變量狀態同步的問題,整個Flutter Framework Widget的渲染過程都運行在一個isolate中,在代碼調用 dart:ui庫時,提供 dart:ui庫中 Native Binding 實現。 這個運行時還控制着 VSync信號的傳遞、GPU數據的填充等,並且還負責把客戶端的事件傳遞到運行時中的代碼。

一套代碼,可以跑在iOS和Android兩個平臺,以後會支持Google新操作系統以及ChromeOS,就連JS也可以直接轉換。

Flutter的整體架構已經介紹完了,相信本篇文章讀完之後,你已經更加了解Flutter了,下一篇文章我會介紹Flutter UI的基礎構建,包括主題、Tab、自定義字體、抽屜、如何刷新UI等等。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章