【Flutter實戰】移動技術發展史

老孟導讀:你們好,這是【Flutter實戰】系列文章的第一篇,這並非一篇Flutter技術文章,而是介紹智能手機操做系統、跨平臺技術的演進以及我對各類跨平臺技術見解的文章。react

智能手機操做系統

塞班(Symbian)系統

後浪們可能都沒有據說過塞班系統,而不少前浪們也會詫異,塞班是智能手機操做系統嗎?讓咱們先來看下智能手機的定義:android

智能手機,是指像我的電腦同樣,具備獨立的操做系統,獨立的運行空間,能夠由用戶自行安裝軟件、遊戲、導航等第三方服務商提供的程序,並能夠經過移動通信網絡來實現無線網絡接入的手機類型的總稱。目前智能手機的發展趨勢是充分加入了人工智能、5G等多項專利技術,使智能手機成爲了用途最爲普遍的專利產品。ios

因此按照如上的定義,塞班系統屬於智能手機操做系統,那爲何不少人都認爲塞班系統不屬於智能手機操做系統呢?主要是由於塞班和如今的Android、iOS智能系統比起來差遠了。git

雖然如今塞班系統已經Game Over了,但當年塞班系統是當之無愧的王者,根本就沒有一個與之匹配的對手。小程序

2008年12月2日,塞班公司被諾基亞收購。windows

2011年12月21日,諾基亞官方宣佈放棄塞班品牌。因爲缺少新技術支持,塞班的市場份額日益萎縮。微信小程序

截止至2012年2月,塞班系統的全球市場佔有量僅爲3%。react-native

2012年5月27日,諾基亞完全放棄開發塞班系統,可是服務將一直持續到2016年。瀏覽器

2013年1月24日晚間,諾基亞宣佈,從此將再也不發佈塞班系統的手機,意味着塞班這個智能手機操做系統,在長達14年的歷史以後,終於迎來了謝幕。服務器

至此,塞班時代終結,一個時代的終結,必將伴隨着新時代的到來。

Windows Phone

Windows Phone(簡稱爲WP)是微軟於2010年10月21日正式發佈的一款手機操做系統,初始版本命名爲Windows Phone7.0。

  • 2011年9月27日,微軟發佈升級版Windows Phone 7.5,這是首個支持簡體中文的系統版本。
  • 2012年6月21日,微軟正式發佈Windows Phone 8,全新的Windows Phone 8捨棄了老舊Windows CE內核,採用了與Windows系統相同的Windows NT內核,支持不少新的特性。因爲內核的改變,全部Windows Phone 7.5系統的手機都將沒法升級至Windows Phone 8。
  • 2015年1月22日,微軟將Windows Phone 10改名爲Windows 10 for Phone。
  • 2015年5月14日,微軟官網正式將智能手機上的版本命名爲「Windows 10 Mobile」 。
  • 2019年12月10日,微軟中止對Windows 10 Mobile的支持。

2019年12月10日這一天,微軟宣佈中止對Windows 10 Mobile的支持,也就宣告Windows 10 Mobile告別了歷史的舞臺。

Windows Phone當年的市場份額一度超過50%,到退出歷史的舞臺,在我看來微軟犯了一個很大的錯誤:

那就是Windows Phone 8的發佈,因爲使用了新的內核致使之前的手機沒法升級並且軟件不向下兼容,致使用戶和開發者極度不爽,用戶剛買了手機,結果你告訴用戶系統不能升級?

新系統致使之前開發的App沒法運行,開發者從新開發一遍?並且還要維護兩套?

系統最核心的資產是生態,當你拋棄了開發者也就意味着生態的殘缺,沒有大量優質的應用用戶怎麼可能買你的手機?

Android

Android系統你們都很是熟悉了,畢竟是當前市場份額最大的移動操做系統,看一下Android的發展歷程:

  • 2003年10月,Andy Rubin等人建立Android公司,並組建Android團隊。
  • 2005年8月17日,Google低調收購了成立僅22個月的高科技企業Android及其團隊。安迪魯賓成爲Google公司工程部副總裁,繼續負責Android項目。
  • 2008年,在GoogleI/O大會上,谷歌提出了AndroidHAL架構圖,在同年8月18號,Android得到了美國聯邦通訊委員會(FCC)的批准,在2008年9月,谷歌正式發佈了Android 1.0系統,這也是Android系統最先的版本。
  • 2009年4月,谷歌正式推出了Android 1.5這款手機,從Android 1.5版本開始,谷歌開始將Android的版本以甜品的名字命名,Android 1.5命名爲Cupcake。
  • 2010年10月,谷歌宣佈Android系統達到了第一個里程碑,即電子市場上得到官方數字認證的Android應用數量已經達到了10萬個,Android系統的應用增加很是迅速。
  • 2011年8月2日,Android手機已佔據全球智能機市場48%的份額,並在亞太地區市場佔據統治地位,終結了塞班系統的霸主地位,躍居全球第一。
  • 今年(2020年)即將發佈Android 11。

iOS

iOS是由蘋果公司開發的移動操做系統 。蘋果公司最先於2007年1月9日的Macworld大會上公佈這個系統,其發展歷程以下:

  • 2007年10月17日,蘋果公司發佈了第一個本地化iPhone應用程序開發包(SDK),而且計劃在2月發送到每一個開發者以及開發商手中。
  • 2010年6月,蘋果公司將「iPhone OS」更名爲「iOS」,同時還得到了思科iOS的名稱受權。
  • 2010年第四季度,蘋果公司的iOS佔據了全球智能手機操做系統26%的市場份額。
  • 2013年6月10日,蘋果公司在WWDC 2013上發佈了iOS 7,幾乎重繪了全部的系統App,去掉了全部的仿實物化,總體設計風格轉爲扁平化設計。將於2013年秋正式開放下載更新。
  • 2016年9月14日,蘋果發佈iOS 10正式版,這是蘋果推出移動操做系統以來最大的一次更新,尤爲增長了不少特別適應中國國情的功能,好比騷擾電話識別、蘋果地圖進一步本地化等。
  • 2018年9月13日,2018蘋果秋季新品發佈會上,蘋果CEO庫克介紹了蘋果生態的一些數據。他表示,搭載蘋果iOS系統設備已達20億部。
  • 2020年5月21日,蘋果發佈iOS 13.5正式版,iOS 13.5加快了配備面容ID的設備在用戶佩戴口罩時顯示密碼欄的速度,並加入了「暴露通知」API以支持來自公共衛生管理機構的COVID-19接觸追蹤App。

跨平臺開發演進

2008年7月IPhone推出第一代手機IPhone 3G,同年9月谷歌正式發佈了Android 1.0系統,標誌着咱們正式步入移動端發展期,按照技術開發的歷程移動端(目前特指Android和iOS)的發展大體能夠分爲4個階段:原生階段->Hybird階段->RN階段->Flutter 階段。

原生階段

使用原生語言(Android使用Java或Kotlin,iOS使用Objective-C 或 Swift )開發應用,稱之爲原生階段

在此階段發現同樣的功能須要在Android和iOS兩端開發,開發和維護成本較高,同時無動態化更新能力,緊急問題的修復和添加新功能都須要到相應平臺發版,尤爲是iOS審覈的週期很是長,在國內Android雖然有動態化方案,但若是上架Google Play頗有可能審覈不經過或者下架,iOS也有動態化,但蘋果官方基本審覈不經過,因此原生的動態化更新受政策影響很大。

從開發者的角度出發,是否有一種方案能夠開發一套代碼在多個平臺運行且能夠動態化更新,無需在走平臺的審覈。基於這個需求H5興起,也就是咱們所說的Hybird階段。

Hybird階段

Hybird實現的基本原理是經過原生的WebView容器加載H5網頁進行渲染,經過JavaScript Bridge調用一部分系統能力,同步更新服務器上的H5網頁也實現了動態更新,俗稱混合應用。

image-20200608113600654

當時大量的公司使用此方案進行開發,最出名的就是Facebook,早期的Facebook在H5上投入了大量的精力,一次開發、快速迭代這是使用H5技術巨大的優點。

然而一切看似美好,但很快發現,H5方案存在致命的缺陷-用戶體驗極差

Facebook創始人兼CEO馬克·扎克伯格在接受採訪的時候認可:專一在HTML 5上面是他有史以來犯過的最大的錯誤。

然而福兮禍所伏,雖然在Facebook上大量使用H5而致使用戶體驗極差,但Facebook基於強大的H5技術積累開發出了偉大的React框架,此框架是React Native框架的基礎。

React Native階段

React Native簡稱RN,是FaceBook在2015年開源,基於 JavaScript,具有動態配置能力跨平臺開發框架。React Native框架原理以下:

image-20200608115921953

React Native 使用React開發,而後生成虛擬DOM樹,虛擬 DOM 是一個 JavaScript 的樹形結構,經過虛擬DOM樹映射到不一樣平臺的本地控件,最終顯示的UI是原生控件,所以在性能體驗上和原生很是相近。和React Native 相似的框架還有阿里巴巴的Weex框架,Weex是在React Native基礎上從新設計了一套開發模式,原理上和React Native 同樣。

React Native 解決了繼承了H5的優勢,同時解決了性能體驗上的問題,2015年React Native一經發布,就在技術圈引發了巨大的反響,在當時看來React Native 是一個很是完美的跨平臺解決方案,很快大量開發者涌入。

當年使用React Native 的開發者最擔憂的不是React Native 性能如何?體驗如何?而是擔憂蘋果會不會封掉React Native,可想而之React Native 的火爆程度,當年著名的JSPatch事件起初,起初你們都在說蘋果開始對React Native下手了,雖而後來證明和React Native無關,但多多少少都對React Native 開發者形成了必定的影響。

隨着時間的流逝,發現React Native 和原生橋接的成本很是高,在複雜場景下會出現嚴重的性能問題,好比早期的ListView滑動卡頓問題。

React Native要橋接到原生控件,但Android和IOS控件的差別致使React Native沒法統一API,有的屬性IOS支持,Android不支持,有的Android支持,IOS不支持,這就致使常常須要開發Android和IOS兩套插件,隨着項目的複雜度提高,也致使維護成本大幅提高。

還有一個很大的問題就是React Native 依賴於 Facebook 的維護,而每次iOS和Android系統版本更新,很大程度上會受到影響。

小程序

從技術上來講,小程序(指微信小程序,下同)並非新的跨平臺方案,它使用瀏覽器內核來渲染界面,小部分由原生組件渲染,原理圖以下:

image-20200608140924092

小程序的運行環境分紅渲染層和邏輯層,通訊會經由微信客戶端(Native)作中轉。

微信小程序目前來看是很是成功的,在我看來微信小程序成功主要緣由並非由於技術,而是生態,固然微信小程序體驗也是很是好的。

對商家來講,微信小程序擁有月活10億的微信用戶,獲客成本低,這是一個流量極佳的平臺,所以不少商家開發了體驗極好的小程序,甚至一些商家把主要平臺遷移到了微信小程序。

對於用戶來講,無需下載,用完就走,極大的提高了用戶體驗,微信提供基礎服務平臺,商家獲客成本低,用戶體驗提高,三方造成完美的平衡,所以微信小程序的生態愈來愈完善。

除了小程序外,相似的方案還有百度的輕應用和快應用,但都不溫不火。

Flutter 階段

千呼萬喚始出來,主角-Flutter終於登場了,Flutter是谷歌的移動UI框架,能夠快速在iOS和Android上構建高質量的原生用戶界面。

image-20200608143242580

Flutter吸取了前面的經驗,它既沒有使用WebView,也沒有使用原生控件進行繪製,而是本身實現了一套高性能渲染引擎來繪製UI,這個引擎就是大名鼎鼎的Skia,Skia是一個2D繪圖引擎庫,Chrome和Android都是採用Skia做爲引擎。Flutter完美的解決了跨平臺代碼複用和性能問題,你們都在感嘆:彷佛UI迎來了終極解決方案。

Flutter侷限性

Flutter並非無所不能的,當你選取Flutter做爲技術方案時,首先要了解Flutter沒法實現哪些功能。

UI平臺一致性

因爲Flutter使用本身的引擎進行UI渲染,而不是用原生控件渲染,致使控件顯示效果和原生不是徹底同樣,雖然肉眼看起來基本同樣,但仍是有一些細微的差異,尤爲當Android和iOS系統升級致使原生控件效果發生變化時,Flutter開發的App並不會進行相應的變化,若是您的App須要原生控件保持徹底一致,Flutter可能並不適合您。

動態化更新

動態化功能在國內來講是一項很是重要的功能,Google官方已經明確現階段不會實現動態化功能。

此功能並非技術上沒法實現,更多的仍是政策和法律上的約束。

所以若是您的App須要動態化功能,那麼Flutter可能並不適合您。

總結

既然Flutter已經如此優秀了,那是否是之後使用Flutter就能夠了呢?答案是否認的,將來很長一段時間應該是原生、Hybird、React Native、Flutter共存時代。

  • 原生開發是沒法徹底避開的,一些硬件(好比藍牙、傳感器等)功能、音視頻和ARVR等相關功能必須使用原生開發,有人說我開發藍牙功能沒用寫原生代碼啊,直接引入便可,你沒有寫,那是由於有人爲你封裝好了第三方插件。
  • Hybird雖然有一些缺陷,但依然有其使用的場景,好比京東、天貓App中的營銷活動都是是H5實現的。
  • React Native可使用原生控件渲染,所以,若是您須要使用原生控件而又想跨平臺,React Native是不錯的選擇。

交流

老孟Flutter博客地址(330個控件用法):laomengit.com

歡迎加入Flutter交流羣(微信:laomengit)、關注公衆號【老孟Flutter】:

相關文章
相關標籤/搜索