tft每日頭條

 > 生活

 > flutter 是否屬于混合開發

flutter 是否屬于混合開發

生活 更新时间:2024-08-12 18:11:06
概念

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,代碼都是在引擎中運行。

  • Android

引擎的C或C 代碼是由Android NDK編譯的,而框架的主要代碼和應用的代碼由Dart compiler編譯成native code執行的。

對于Android應用來說,Flutter框架在引擎中實現了一個繼承于SurfaceView的 FlutterView。用戶所看到的UI都是在這個SurfaceView中顯示。如果要和原生平台功能交互,則可以在Activity中使用FlutterView,并通過Flutter提供的消息API和原生平台收發消息。

  • ios

引擎的C或C 代碼是由LLVM編譯的,而所有Dart的代碼會被AOT編譯成native code,整個APP運行時使用的是機器指令(并不是攔截器)。

系統架構
  • 層次描述

flutter 是否屬于混合開發(開發10年老碼農經驗談)1

  • 圖形管道

flutter 是否屬于混合開發(開發10年老碼農經驗談)2

  • 渲染管道

flutter 是否屬于混合開發(開發10年老碼農經驗談)3

  • 控件生命周期

flutter 是否屬于混合開發(開發10年老碼農經驗談)4

  • 狀态生命周期

flutter 是否屬于混合開發(開發10年老碼農經驗談)5

繪制流程
  • 入口

界面的布局和繪制在每一幀都在發生着,甚至界面沒有變化,它也會存在;可以想象每一幀裡面,引擎都像流水線的一樣重複着幾個過程:build(構建控件樹),layout(布局), paint(繪制)和 composite(合成),周而複始。驅動整個流水線的入口是WidgetBinding.drawFrame方法。

  • 布局約束

根據parent給予的約束條件來計算size,而設置size隻能在performResize或者performLayout中進行,如果設置sizedByParent為true,則隻能在performResize中進行,否則就隻能在performLayout中與child的布局同時進行。

  • Layer層

flutter 是否屬于混合開發(開發10年老碼農經驗談)6

關于Flutter的大廠精選面試題(部分)
  1. dart是值傳遞還是引用傳遞
  2. Jvm虛拟機
  3. messageQueue會不會阻塞ui線程
  4. 對象鎖和類鎖
  5. 之字形打印樹
  6. Widget和element和RenderObject之間的關系
  7. widget的root節點
  8. mixin extends implement之間的關系
  9. jvm内存模型
  10. Future和microtask執行順序
  11. dart中..的用法
  12. await for

題外話,我在三星小米工作多年,深知技術改革和創新的方向,Android開發以其美觀、快速、高效、開放等優勢迅速俘獲人心,但很多Android興趣愛好者所需的進階學習資料确實不太系統,完整。今天我把我搜集和整理的這份學習資料分享給有需要的人,若有關Android學習進階可以與我在Android終極開發交流群一起讨論交流。由于篇幅問題需要Flutter相關學習進階資料以及上面Flutter問題答案的可以私信我【Flutter】,我免費分享給大家。領取資料的同時,還可以加入一個好的學習交流圈,何樂而不為呢?加入我們和我們一起吧!!

flutter 是否屬于混合開發(開發10年老碼農經驗談)7

  • Android高級工程師Flutter系統學習知識體系

flutter 是否屬于混合開發(開發10年老碼農經驗談)8

  • Flutter進階學習全套手冊

flutter 是否屬于混合開發(開發10年老碼農經驗談)9

  • 對标阿裡P7 Flutter進階學習必備知識
  • flutter 是否屬于混合開發(開發10年老碼農經驗談)10

    ,

    更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

    查看全部

    相关生活资讯推荐

    热门生活资讯推荐

    网友关注

    Copyright 2023-2024 - www.tftnews.com All Rights Reserved