Flutter簡介

這是Flutter項目主頁上對Flutter的定義,它能夠輕鬆、快速地構建漂亮的移動應用。瀏覽器

Flutter是Google使用Dart語言開發的移動應用開發框架,使用一套Dart代碼就能構建高性能、高保真的iOS和Android應用程序,而且在排版、圖標、滾動、點擊等方面實現零差別。
框架

像大部分的應用開發框架同樣,在新建一個Flutter項目時,會有一個默認的main.dart文件,此時將項目編譯運行在iOS與Android真機設備中,效果就像上面的圖片所展現的那樣。
實現跨平臺
Flutter不是黑科技,應用程序的代碼老是以一種很是合理,能夠解釋的方式的運行着,只是須要去了解而已。Flutter可以在iOS和Android上運行起來,依靠的是一個叫Flutter Engine的虛擬機,Flutter Engine是Flutter應用程序的運行環境,開發人員能夠經過Flutter框架和API在內部進行交互。性能

Flutter Engine使用C/C++編寫,具備低延遲輸入和高幀速率的特色。關注AR/VR的人應該都知道,AR/VR對延遲和幀速率的要求比傳統遊戲要高得多,由於它們要求在用戶在移動時保持真實世界的穩定性。所以筆者認爲Flutter在將來的應用與發展中會佔有一席之地。動畫

接下來以Android平臺爲例,簡單的介紹一下Flutter的原理,有Android開發經驗的人都知道,Android應用程序是運行在Dalvik虛擬機裏面的,而且每個應用程序對應有一個單獨的Dalvik虛擬機實例,可是Flutter應用程序不使用Dalvik虛擬機。
操作系統

以一個Flutter項目爲例,當項目編譯成Android後,生成的安裝包大約23M。常規的Android應用程序安裝包大多都能控制在10M之內,爲何Flutter項目編譯的Android安裝包要23M呢?經過使用Android Studio打開該安裝包查看,上面的圖片是Android Studio顯示的結果。設計

經過觀察安裝包的內容,能夠發現lib目錄的大小約爲48M,因此安裝包龐大的主因就在lib目錄。lib目錄下包含x86_6四、x86和armeabi-v7a三種CPU類型的指令集,因而可知,Flutter編譯的Android應用程序自帶獨立的虛擬機,也就是上面提到的Flutter Engine。
移動應用開發

Flutter編譯的iOS應用程序採起的方案是,使用iOS運行時(Runtime)實現跨平臺,iOS運行時(Runtime)是一個用匯編寫的一段程序,能夠執行C/C++編譯的二進制。iOS原生開發的Objective-C語言也是經過iOS運行時(Runtime)執行C/C++的二進制文件,因此Flutter編譯的iOS應用能和原生應用不相上下。
blog

2017年的Google發佈會上,Google簡單介紹了正在研發中的操做系統Fuchsia,另有消息稱,該系統的UI用戶界面層使用的是Dart語言開發的Flutter框架,筆者相信該消息是真實的,由於在開發Flutter項目的過程當中,使用獲取當前平臺類型方法時,可選項目中除了iOS和Android,還包含Fuchsia,以下圖所示。
遊戲

所以,筆者大膽推測Flutter框架實現跨平臺的原理,在Fuchsia系統中已經包含Flutter Engine虛擬機,能夠直接能夠運行Flutter應用程序,Android和iOS系統則是在程序包中內置Flutter Engine虛擬機以運行Flutter應用程序。圖片

框架結構
下面的圖片是Flutter框架結構圖,對大部分開發者而言,最經常使用的是Widgets層,屏幕上可見與不可見的元素都由Widgets層實現,這些元素被稱爲Widget。在Widgets層在上層,有兩個現成的Widget庫,Material庫即Material Design的Widget庫,Material Design是Google I/O 2014發佈的設計語言,目前成爲統一Android Mobile、Android Table、Desktop Chrome等平臺的設計語言規範。Cupertino庫則是一個模仿iOS設計風格的Widget庫。

Flutter框架結構圖的底層是Flutter Engine虛擬機,在這一層次中須要瞭解一下的是Skia,Skia是Google研發的包括圖形、文本、圖像、動畫等多方面的圖形引擎,不只用於Google Chrome瀏覽器,Android系統也採用Skia做爲繪圖處理引擎。

上面的圖片展現了Flutter的繪圖原理,Flutter框架直接使用Skia引擎來渲染,所以可以控制渲染幀數,從而實現高幀速率。

相關文章
相關標籤/搜索