Flutter系列(三) 整體架構

Android丶OR發表於2019-06-29

您好,歡迎關注我的專欄,本篇是關於 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等等。

贊一下贊一下贊一下


相關文章