Flutter混合棧管理方案對比

? ? ? ? 1.Google官方(多引擎方案)

????????Google官方建議的方式是多引擎方案,即每次使用一個新的FlutterEngine來渲染Widget樹,存在的主要問題是每個引擎都要有比較大的內存等資源消耗,雖然Flutter?2.0之后的FlutterEngineGroup通過在引擎間共享GPU?上下文、font?metrics?和?isolate?group?snapshot,開銷已大大降低,但是仍然沒有解決每個FlutterEngine是一個單獨isolate,不同FlutterEngine間的通信將會是非常麻煩的問題。

? ? ? ??2.大名鼎鼎的閑魚flutter_boost(單引擎方案)

????????Flutter?Boost采用的是直接共享Flutter?engine對象,在頁面切換時,?Flutter?View與Flutter?Engine進行attach與detach操作。Flutter?boost早期版本Dart側維護了一個Navigator棧的結構,基于棧的操作依賴對Flutter框架的一個屬性修改,具有侵入性,并且由于pop出的頁面就會銷毀,在多個平級邏輯頁面切換,無法使其它flutter平級頁面狀態得到保持。最新版本主要變化是,?不再用棧式結構來管理Flutter頁面,?改為在native側和Flutter側對所有頁面都進行緩存。頁面的創建與銷毀與對應的native容器的生命周期保持一致。這一改變解決了侵入性問題,并且所有頁面的狀態都可以保持。

????????簡言之,?Flutter?boost最新版本的核心邏輯是,頁面導航的核心仍然由native進行驅動,根據native側的頁面生命周期事件,通過channel通知Flutter側響應頁面上屏等邏輯。?對于每個Flutter頁面,?在native側,?則都有一個FlutterViewContainer實例與之對應,??在dart側則是一個BoostContainer實例,其緩由FlutterContainerManager進行管理,兩者通過通信,保持生命周期一致。哪個頁面需要顯示,在native側就是將對應的vc?push進導航棧,同時將flutter引擎attach到對應的FlutterViewController。

? ? ? ?但Flutter?boost方案仍然存在一些問題:

????????(1)開源版本不夠穩定,?適配Flutter新版本非常慢

????????(2)未完全剝離對阿里業務框架的依賴,里面包含很多與導航無關的代碼依賴

????????3.哈嘍單車團隊的flutter_thrio(單引擎/多引擎均支持)

? ? ? ? flutter_thiro是哈嘍單車團隊提供的一個解決方案,其與flutter_boost的主要不同是,flutter_boost的導航切換都是由native側驅動,每次頁面切換native側都會創建一新的頁面放到導航棧中,而flutter_thrio在native之間及native和flutter之間的頁面切換同樣由native側驅動,但flutter頁面內部的切換由flutter自帶的Navigator來管理,native側導航棧不創建對應的頁面容器。這樣做的好處是可以節省部分內存,但需要通過一層包裝處理隔離這種導航實現方式上的差異,實現上會更復雜一些。

????????

??????????? 不過flutter_thrio整體封裝相當不錯,所有的頁面切換邏輯非常統一,均采用基于url進行頁面跳轉。同時既支持單引擎工作模式,也支持多引擎工作模式,同時不存在對引擎代碼的侵入式修改,不過該方案開源代碼已經有兩年多沒有更新,如果遇到問題,可能需要自行維護。

????????4.字節跳動團隊的Isolate復用方案和騰訊心悅團隊的TRouter方案

????????這兩個方案均未開源介紹來看都存在flutter引擎侵入式修改,比如今日頭條的方案就是通過修改 Flutter Engine 源碼,使多 FlutterView 實例對應的多 Flutter Engine 能夠在底層共享?Isolate。即在上層看來有多個Flutter?Engine?實例,但在底層只有一個唯一的Isolate,這樣就可以在解決多引擎內存占用大的問題的同時,保持數據仍然可以在引擎間共享。這類侵入性比較強的方案存在的主要問題是,接入方案就需要接入相關的自定義flutter引擎代碼,后續在可維護性上以及對flutter版本升級的兼容性上都存在較大不確定性。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/718125.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/718125.shtml
英文地址,請注明出處:http://en.pswp.cn/news/718125.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

網絡安全: Kali Linux 使用 nmap 掃描目標主機

目錄 一、實驗 1.環境 2. Kali Linux (2024.1) 使用 namp 掃描目標主機 3.Kali Linux (2024.1)遠程登錄 Windows Server 4.Kali Linux (2024.1) 使用crunch字典工具 5.Kali Linux (2024.1)使用hydra密碼工具 6.Kali Linux (2022.3) 通過SSH端口獲取 Ubuntu 密碼 二、問題…

【信息系統項目管理師】--【信息技術發展】--【新一代信息技術及應用】--【區塊鏈】

文章目錄 第二章 信息技術發展2.2 新一代信息技術及應用2.2.4 區塊鏈1.技術基礎2.關鍵技術3.應用和發展 第二章 信息技術發展 信息技術是在信息科學的基本原理和方法下,獲取信息、處理信息、傳輸信息和使用信息的應用技術總稱。從信息技術的發展過程來看&#xff0c…

3月03日,每日信息差

🎖 素材來源官方媒體/網絡新聞 🎄 國產商用飛機C919及ARJ21首次飛抵老撾 🌍 北京將打造新一批智能工廠 🌋 阿里云將于3月29日停止商標代理服務 🎁 起亞在美因遠光燈故障召回3.5萬輛Telluride汽車 ? 天涯社區擬5月1日前…

C++——模板詳解

目錄 模板 函數模板 顯示實例化 類模板 模板特點 模板 模板,就是把一個本來只能對特定類型實現的代碼,變成一個模板類型,這個模板類型能轉換為任何內置類型,從而讓程序員只需要實現一個模板,就能對不同的數據進行操…

FPGA-串口接收圖像寫入RAM并讀出在TFT顯示屏上顯示

系統框圖: 需要用到的模塊有: 1,UART_RX(串口接收模塊); 2,串口接受的數據存放到RAM模塊; 3,RAM IP核; 4,時鐘IP核 (TFT顯示屏驅動時鐘的產生&#xff09…

kafka同步副本集及關鍵參數

上篇文章講了副本機制是什么,一文讀懂kafka內部怎么運行的-CSDN博客 這里深挖下同步副本集及里面的關鍵參數。副本會去leader副本拉去數據追加到自己日志中。 我們知道kafka副本的作用是提高系統的高可用。當leader副本掛了時,會從候選副本集中選者一個當…

java-冪等性

冪等性 1.1冪等性定義: 在計算機領域中,冪等(Idempotence)是指任意一個操作的多次執行總是能獲得相同的結果,不會對系統狀態產生額外影響。在Java后端開發中,冪等性的實現通常通過確保方法或服務調用的結…

設計模式(十四)中介者模式

請直接看原文: 原文鏈接:設計模式(十四)中介者模式_設計模式之中介模式-CSDN博客 -------------------------------------------------------------------------------------------------------------------------------- 前言 寫了很多篇設計模式的…

Ribbon實現Cloud負載均衡

安裝Zookeeper要先安裝JDK環境 解壓 tar -zxvf /usr/local/develop/jdk-8u191-linux-x64.tar.gz -C /usr/local/develop 配置JAVA_HOME vim /etc/profile export JAVA_HOME/usr/local/develop/jdk1.8.0_191 export PATH$JAVA_HOME/bin:$PATH export CLASSPATH.:$JAVA_HOM…

npm install 一直在等待sill idealTree buildDeps

最近在整vue的前端項目,npm install的時候一直在等待,記錄下處理過程。 1.檢查當前npm鏡像的地址 輸入命令:"npm config get registry",如果結果是"https://registry.npmjs.org/"。 更換下地址&#xff0c…

Windows Server 各版本搭建文件服務器實現共享文件(03~19)

一、Windows Server 2003 打開服務器,點擊左下角開始?管理工具?管理您的服務器?添加或刪除角色 點擊下一步等待測試 勾選自定義配置,點擊下一步 選擇文件服務器,點擊下一步 勾選設置默認磁盤空間,數據自己更改,最…

【JavaEE】_Spring MVC 項目傳參問題

目錄 1. 傳遞單個參數 1.1 關于參數名的問題 2. 傳遞多個參數 2.1 關于參數順序的問題 2.2 關于基本類型與包裝類的問題 3. 使用對象傳參 4. 后端參數重命名問題 4.1 關于RequestPara注解 1. 傳遞單個參數 現創建Spring MVC項目,.java文件內容如下&#xff…

2024年3月計劃

根據規劃,為了要考慮把產品代碼吃透。先對于計算幾何,圖像處理,測量學基礎進行 當然,也要把ue繼續進行著。ue的rpg和底層渲染。收集下虛幻商城的免費資源,萬一以后做獨立游戲用得到。其他的可以暫時不進行。因為ue的工…

Apache Flink連載(三十七):Flink基于Kubernetes部署(7)-Kubernetes 集群搭建-3

?? 個人主頁:IT貧道-CSDN博客 ?? 私聊博主:私聊博主加WX好友,獲取更多資料哦~ ?? 博主個人B棧地址:豹哥教你學編程的個人空間-豹哥教你學編程個人主頁-嗶哩嗶哩視頻 目錄

AI-數學-高中-32-概率-樣本空間與隨機事件

原作者視頻:【概率】【一數辭典】1樣本空間與隨機事件_嗶哩嗶哩_bilibili 1.隨機試驗: 2.樣本點、樣本空間、有限樣本空間: 示例1 示例2 3.事件: 示例:

PAT基礎練習

本題要求你寫個程序把給定的符號打印成沙漏的形狀。例如給定17個“*”,要求按下列格式打印 ************ *****所謂“沙漏形狀”,是指每行輸出奇數個符號;各行符號中心對齊;相鄰兩行符號數差2;符號數先從大到小順序遞減…

自己本地模擬內存數據庫增刪改查

目錄 學習初衷準備代碼實現結果感謝閱讀 學習初衷 用于滿足自己的測試要求,不連接數據庫,也不在意數據丟失 準備 maven依賴 org.springframework.boot spring-boot-starter-test test 代碼實現 內存數據庫(InMemoryDatabase&#xff0…

[AutoSar]BSW_Com08 CAN driver 模塊介紹及參數配置說明 (二)

目錄 關鍵詞平臺說明一、CanControllers二、CanTxProcessing三、CanFilterMask四、CanHardwareObjects五、CanGeneral 關鍵詞 嵌入式、C語言、autosar、OS、BSW 平臺說明 項目ValueOSautosar OSautosar廠商vector ,芯片廠商TI 英飛凌編程語言C,C編譯器…

游戲引擎分層簡介

游戲引擎分層架構(自上而下) 工具層(Tool Layer) 在一個現代游戲引擎中,我們最先看到的可能不是復雜的代碼,而是各種各樣的編輯器,利用這些編輯器,我們可以制作設計關卡、角色、動畫…

數據類型和變量

1.數據類型 在Java中數據類型主要分為兩類:基本數據類型和引用數據類型。 基本數據類型有四類八種: 1. 四類:整型、浮點型、字符型以及布爾型 2.八種: 整形是分為如上四種 byte short int long 浮點型分為 float 和double …