Flutter 學(xué)習(xí)筆記

Flutter 框架學(xué)習(xí)

學(xué)習(xí)Flutter ?首先我們要了解Flutter 框架是什么?他是解決什么問題?

????Flutter 本身是Hybrid App,俗稱混合應(yīng)用检激,即混合了 Native技術(shù) 與 Web技術(shù) 進(jìn)行開發(fā)的移動(dòng)應(yīng)用肴捉。在APP中使用 WebView 作為容器直接承載 Web頁面,在他之前業(yè)界也有很多類似的解決方案

那Hybrid App又是什么

????Hybrid App(混合模式移動(dòng)應(yīng)用)是指介于web-app叔收、native-app這兩者之間的app齿穗,兼具"Native App良好用戶交互體驗(yàn)的優(yōu)勢"和"Web App跨平臺開發(fā)的優(yōu)勢"。

????混合開發(fā)中最核心的點(diǎn)就是 Native端 與 H5端 之間的雙向通訊層饺律,其實(shí)這里也可以理解為我們需要一套跨語言通訊方案窃页,來完成 Native(Java/Objective-c/...) 與 JavaScript 的通訊。這個(gè)方案就是我們所說的 JSBridge蓝晒,而實(shí)現(xiàn)的關(guān)鍵腮出,便是作為容器的 WebView,一切的原理都是基于 WebView 的機(jī)制芝薇。

那么都有那些??Hybrid App(混合模式移動(dòng)應(yīng)用)呢?

業(yè)界方案

1作儿、基于 WebView UI 的基礎(chǔ)方案洛二,市面上大部分主流 App 都有采用,例如微信JS-SDK攻锰,通過 JSBridge 完成 H5 與 Native 的雙向通訊晾嘶,從而賦予H5一定程度的原生能力。

2娶吞、基于 Native UI 的方案垒迂,例如 React-Native、Weex妒蛇。在賦予 H5 原生API能力的基礎(chǔ)上机断,進(jìn)一步通過 JSBridge 將js解析成的虛擬節(jié)點(diǎn)樹(Virtual DOM)傳遞到 Native 并使用原生渲染。

3绣夺、近期比較流行的小程序方案吏奸,通過更加定制化的 JSBridge蚂维,并使用雙 WebView 雙線程的模式隔離了JS邏輯與UI渲染床玻,形成了特殊的開發(fā)模式,加強(qiáng)了 H5 與 Native 混合程度联贩,提高了頁面性能及開發(fā)體驗(yàn)烈钞。

4泊碑、Flutter: 他是谷歌的移動(dòng)UI框架,可以快速在iOS和Android上構(gòu)建高質(zhì)量的原生用戶界面毯欣。采用了高性能渲染引擎(Skia)馒过,界面開發(fā)語言使用dart,底層渲染引擎使用C, C++仪媒,框架層面針對IOS和安卓平臺分別實(shí)現(xiàn)了對應(yīng)的UI風(fēng)格組件庫沉桌。相比webview渲染谢鹊、nativeUI渲染,性能更加出色留凭。由于推出不久佃扼,性能還不夠穩(wěn)定。

與Flutter不同傳統(tǒng)的?Hybrid App(混合模式移動(dòng)應(yīng)用)都是依靠webview渲染蔼夜、nativeUI渲染來完成大致都是如下兩種方式

(一) JavaScript 調(diào)用 Native接口方式

基于WebView的機(jī)制和開放的 API, 實(shí)現(xiàn)這個(gè)功能有三種常見的方案:

1)兼耀、API注入,原理其實(shí)就是 Native 獲取 JavaScript環(huán)境上下文求冷,并直接在上面掛載對象或者方法瘤运,使 js 可以直接調(diào)用,Android 與 IOS 分別擁有對應(yīng)的掛載方式匠题。

2)拯坟、WebView 中的 prompt/confirm/alert 攔截,通常使用 prompt韭山,因?yàn)檫@個(gè)方法在前端中使用頻率低郁季,比較不會出現(xiàn)沖突;

3)钱磅、WebView URL Scheme 跳轉(zhuǎn)攔截梦裂;

4)、在IOS上wkwebview上有window.webkit.messageHandler實(shí)現(xiàn)通信盖淡,支持IOS8及以上

(二) Native 調(diào)用 Javascript接口方式

????由于Native可以算作 H5 的宿主年柠,因此擁有更大的權(quán)限,上面也提到了 Native 可以通過 WebView API直接執(zhí)行 Js 代碼褪迟。這樣的權(quán)限也就讓這個(gè)方向的通訊變得十分的便捷冗恨。

IOS:? ?webview.stringByEvaluatingJavaScriptFromString("alert('NativeCall')")

Android: webView.loadUrl("javascript:JSBridge.trigger('NativeCall')")


Flutter?

????Flutter是Google推出并開源的移動(dòng)應(yīng)用程序(App)開發(fā)框架,主打跨平臺牵咙、高保真派近、高性能。其采用Dart語言作為開發(fā)語言洁桌,開發(fā)者可以通過Dart語言開發(fā)Flutter App渴丸,一套代碼可同時(shí)運(yùn)行在iOS和Android平臺上。Flutter提供了豐富的組件另凌、接口谱轨,開發(fā)者可以很快地為Flutter添加原生擴(kuò)展。

????Flutter與其他用于構(gòu)建App的大多數(shù)框架不同吠谢,因?yàn)镕lutter既不使用WebView土童,也不使用平臺(Android、iOS等)的原生控件工坊。相反献汗,F(xiàn)lutter使用自己的高性能渲染引擎來繪制Widget敢订。這樣不僅可以保證在Android和iOS平臺上UI的一致性,而且也可以避免對原生控件依賴而帶來的限制及高昂的維護(hù)成本罢吃,相比于其他方式楚午,Flutter 更注重的是移動(dòng)端跨平臺方案

????在傳統(tǒng)的原生開發(fā)中,一般都要維護(hù)Android尿招、iOS兩個(gè)開發(fā)團(tuán)隊(duì)矾柜,版本迭代時(shí),無論人力成本就谜,還是測試成本都會變大怪蔑。這一點(diǎn)可能對于我們普通的android程序員感受并不深,或者說我們不care這一點(diǎn)丧荐。

????但是站在開發(fā)的角度上缆瓣,如果能夠有一套代碼,直接就能夠開發(fā)出android的apk和ios的ipa篮奄,一套代碼也能夠很好的完成復(fù)用捆愁、測試以及UI風(fēng)格的統(tǒng)一。

????早在2008年窟却,就有一款叫做“PhoneGap”的框架獲了獎(jiǎng)并開始支持Android平臺。現(xiàn)在我們說的PhoneGap一般指的是"Cordova"呻逆。它是PhoneGap貢獻(xiàn)給Apache后的開源項(xiàng)目夸赫,是從PhoneGap中抽離出的核心代碼,是驅(qū)動(dòng)PhoneGap的核心引擎咖城。

????兩者維護(hù)的是共同的一份源代碼組件茬腿,只有名字和包名不一樣。PhoneGap是一個(gè)采用HTML宜雀,CSS和JavaScript來完成跨平臺開發(fā)的技術(shù)切平,當(dāng)時(shí)PhoneGap宣稱接近原生性能。然而它的工作原理是基于WebView辐董,然后利用JavaInterface來完成與原生代碼的交互悴品。我們稱這種工具為WebView JavaScript Bridge(JsBridge)。這種方式简烘,能夠很好的解決跨平臺與動(dòng)態(tài)更新的需求苔严。

????但是我們都知道android WebView的渲染效率很差,同時(shí)JavaScript是解釋型語言孤澎,它不需要編譯届氢,在運(yùn)行時(shí)候解釋執(zhí)行,這就導(dǎo)致JavaScript的執(zhí)行性能太低了覆旭。同時(shí)因?yàn)閍ndroid自身的問題退子,使用WebView過程中消耗的內(nèi)存岖妄,沒有辦法在不需要使用的時(shí)候進(jìn)行及時(shí)的回收,這樣會導(dǎo)致我們的可用內(nèi)存越來越少寂祥,最終OOM荐虐。所以類似Flutter這種框架的出現(xiàn)是必然的,現(xiàn)有的跨平臺框架壤靶,比如RN都是基于JS缚俏,由于JS的執(zhí)行性能,導(dǎo)致跨平臺應(yīng)用性能一直無法突破瓶頸贮乳。

????而Flutter在Debug使用JIT編譯忧换,支持熱重載,能夠提高我們的開發(fā)效率向拆,而Release中利用AOT直接編譯成機(jī)器碼亚茬,能夠達(dá)到更好的性能。從設(shè)計(jì)角度而言浓恳,F(xiàn)lutter提供了非常豐富的Widget組件刹缝,能夠讓我們非常輕松的實(shí)現(xiàn)Android或者IOS風(fēng)格的UI效果。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末颈将,一起剝皮案震驚了整個(gè)濱河市梢夯,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌晴圾,老刑警劉巖颂砸,帶你破解...
    沈念sama閱讀 207,248評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異死姚,居然都是意外死亡人乓,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評論 2 381
  • 文/潘曉璐 我一進(jìn)店門都毒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來色罚,“玉大人,你說我怎么就攤上這事账劲〈粱ぃ” “怎么了?”我有些...
    開封第一講書人閱讀 153,443評論 0 344
  • 文/不壞的土叔 我叫張陵涤垫,是天一觀的道長姑尺。 經(jīng)常有香客問我,道長蝠猬,這世上最難降的妖魔是什么切蟋? 我笑而不...
    開封第一講書人閱讀 55,475評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮榆芦,結(jié)果婚禮上柄粹,老公的妹妹穿的比我還像新娘喘鸟。我一直安慰自己,他們只是感情好驻右,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,458評論 5 374
  • 文/花漫 我一把揭開白布什黑。 她就那樣靜靜地躺著,像睡著了一般堪夭。 火紅的嫁衣襯著肌膚如雪愕把。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,185評論 1 284
  • 那天森爽,我揣著相機(jī)與錄音恨豁,去河邊找鬼。 笑死爬迟,一個(gè)胖子當(dāng)著我的面吹牛橘蜜,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播付呕,決...
    沈念sama閱讀 38,451評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼计福,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了徽职?” 一聲冷哼從身側(cè)響起象颖,我...
    開封第一講書人閱讀 37,112評論 0 261
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎姆钉,沒想到半個(gè)月后力麸,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,609評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡育韩,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,083評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了闺鲸。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片筋讨。...
    茶點(diǎn)故事閱讀 38,163評論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖摸恍,靈堂內(nèi)的尸體忽然破棺而出悉罕,到底是詐尸還是另有隱情,我是刑警寧澤立镶,帶...
    沈念sama閱讀 33,803評論 4 323
  • 正文 年R本政府宣布壁袄,位于F島的核電站,受9級特大地震影響媚媒,放射性物質(zhì)發(fā)生泄漏嗜逻。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,357評論 3 307
  • 文/蒙蒙 一缭召、第九天 我趴在偏房一處隱蔽的房頂上張望栈顷。 院中可真熱鬧逆日,春花似錦、人聲如沸萄凤。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽靡努。三九已至坪圾,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間惑朦,已是汗流浹背兽泄。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留行嗤,地道東北人已日。 一個(gè)月前我還...
    沈念sama閱讀 45,636評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像栅屏,于是被迫代替她去往敵國和親飘千。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,925評論 2 344