关于 Android 和 iOS 流畅度的一切
生活随笔
收集整理的這篇文章主要介紹了
关于 Android 和 iOS 流畅度的一切
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
2019獨(dú)角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>
之前發(fā)表了《論蘋果公司的系統(tǒng)拖累策略》,在看了鋒友的回復(fù)之后,發(fā)現(xiàn)無論大家是贊成或者反對,可能都對Android和iOS的認(rèn)識(shí)上存在著一些盲區(qū)和誤區(qū),于是答應(yīng)轉(zhuǎn)載這篇專業(yè)分析兩個(gè)系統(tǒng)的文章,以便科普。來得有些遲,還是希望各位諒解。這篇文章對我的啟發(fā)和在認(rèn)識(shí)上的更新幫助都比較大,又出于我個(gè)人比較重視知識(shí)版權(quán)和勞動(dòng)成果的保護(hù),所以呢,在這里我想著重寫明文章作者和出處,希望版主不要封殺:
作者:DoubleLee? ?出處:zealer+
-------------------------------------------------科技分割線 -------------------------------------------------
寫在前面的一些話:
在糾結(jié)了很久以后,我決定開個(gè)帖子(也是我在 Zealer??的第一帖)來寫 iOS 和 Android,也算是對自己近幾年來學(xué)習(xí)成果的一個(gè)總結(jié)。這個(gè)話題非常大,本人雖盡我所能查證來源,但也難免會(huì)有疏漏,有的話歡迎指出。? ?:)
如果覺得概念太多看不下去就直接看加粗部分就夠了。
我希望大家讀完我的這篇帖子后,是這樣的:
而不是: ? ?? ? 我們應(yīng)該為這個(gè)世界的多樣性而感到慶幸,不是么?
一、什么是流暢?什么是卡頓? 如果我們討論流暢和卡是建立在不同的標(biāo)準(zhǔn)上,一定會(huì)變成毫無意義的口水戰(zhàn)。在這里,流暢我們定義為運(yùn)行程序時(shí)達(dá)到 60fps 或以上的繪制效率,且盡可能少丟幀。卡頓我們定義為程序運(yùn)行時(shí)無法達(dá)到 60fps,丟幀頻繁。
二、Apple 和 Android陣營 比是不是能帶來更流暢的應(yīng)用體驗(yàn)? 不是。兩者都非常順滑,用久了也都不卡頓。Android 定義為?帶有GMS推送的,帶有良好 Android 應(yīng)用生態(tài)圈的(包括少數(shù)國內(nèi)優(yōu)秀應(yīng)用),具有Google Play 服務(wù)的 Android 手機(jī),擁有健康使用習(xí)慣的 Android。包括但不限于Nexus,Moto,SONY,LG,htc,Samsung 在沒有封殺Google的市場的使用體驗(yàn)。
三、Apple 和 安卓陣營 比是不是能帶來更流暢的應(yīng)用體驗(yàn)? 1.是。安卓(尤其是用久了)很可能會(huì)卡頓。安卓 定義為?不帶GMS推送的,缺失良好 Android 應(yīng)用生態(tài)的,不具有 Google Play 服務(wù)的,基于各種“深度優(yōu)化,深度定制,世界第一,跑分天王,etc.” 家,配合 “動(dòng)不動(dòng)就管家衛(wèi)士全家桶,清理內(nèi)存釋放手機(jī)速度,打敗全國百分之XX” 的用戶的 安卓生態(tài)。
四、Apple 和 Android陣營 硬件對比 Apple 硬件處于一個(gè)什么樣的水平?足夠優(yōu)秀的水平,Apple是著名的硬件狂魔,并不是大家想的iPhone硬件遠(yuǎn)遠(yuǎn)不及Android陣營。
1、Android 陣營目前的旗艦 Soc?之一?是基于 高通810 的解決方案(MTK 和 三星,華為 的解決方案不是很了解,歡迎補(bǔ)充。當(dāng)然業(yè)界一般認(rèn)為是三星的CPU 14nm制程更先進(jìn),所以功耗發(fā)熱的表現(xiàn)較810更好。),它擁有 8 個(gè) CPU核心,20nm制程,主頻高達(dá) 2 GHz。810純CPU計(jì)算能力,并發(fā)計(jì)算能力優(yōu)于 A8。但它頻率高,核心多,功耗和發(fā)熱量在密集計(jì)算時(shí)也會(huì)遠(yuǎn)高于A8,發(fā)熱會(huì)限制 810 的發(fā)揮。
2、CPU Cache 方面: A8非常慷慨地配備了高達(dá) 64KB 64KB的L1 Cache,1MB L2 Cache和4MB L3 Cache,與上一代 A7 相同,810 數(shù)據(jù)不明。但實(shí)際應(yīng)用來看,似乎 810 配備的 Cache 喂不飽 8個(gè)核心,存在 Cache Miss 的情況。(有硬件信息的朋友歡迎補(bǔ)充)但是,即使沒有準(zhǔn)確數(shù)據(jù)的情況下,有一件事情也是可以確定的,那就是?Cache per Core數(shù)據(jù) 810 絕對不如 A8。如果要做到一樣的水平,那么 810 要配備 128kb L1 Cache,4MB L2 Cache,16MB L3 Cache。要知道的是,這么多的 Cache 即使是對于 Intel Core i7 也是很奢侈的。而如果假設(shè) 810和A8配備了一樣的Cache,810 的 Cache per Core 數(shù)據(jù)就很難看了。要知道,CPU Cache 的速度遠(yuǎn)高于 RAM 的速度,所以小 Cache 帶來的情況就是 外圍 I/O 經(jīng)常處于等待狀態(tài),延遲了 CPU 計(jì)算能力的發(fā)揮。打個(gè)比方,你拿跑車引擎配個(gè)4速變速箱,引擎的能力就無法發(fā)揮了。Cache 方面,A8 表現(xiàn)優(yōu)于 810。
3、GPU 方面,A8配備的 PowerVR Series 6XT GX6450 運(yùn)算能力是 136.4 Gflops(533MHz)/153.6 GFlops(600MHz),稍微優(yōu)于 801 配備的 Adreno 330 ,Adreno 430 則是 324~388.8 GHz(600MHz)【水冷……】。畢竟當(dāng)時(shí)高通設(shè)計(jì)810的時(shí)候就是用來拖 4k的,圖形性能 Adreno 430 數(shù)據(jù)上遠(yuǎn)優(yōu)于 GX6450,但是 GX6450 帶 1334*750 相當(dāng)于 801帶720p,帶 1920*1080 分辨率性能也足夠充裕。
4、晶體管數(shù)量,喪心病狂的A8堆了20億個(gè)晶體管(包括Cache,GPU,dsp),已經(jīng)趕上810 所有8個(gè)核的總晶體管數(shù)量了。帶來了A8極其兇殘的單核性能。810 單核性能弱于 A8。
五、系統(tǒng)與運(yùn)行機(jī)制層面 (一)內(nèi)核 1、又要開始拿Linux 和Unix 說事了,但很不幸的是,流暢這件事跟系統(tǒng)內(nèi)核一點(diǎn)關(guān)系都沒有。
2、說個(gè)老梗: ·? ?iOS 基于Unix所以是Touch(響應(yīng)觸摸操作)——Media——Service——Core 架構(gòu) ·? ?Android基于Linux所以是Application——Framework——Library(包含了響應(yīng)觸摸操作的顯示相關(guān))——Kernal架構(gòu) ·? ?所以iOS 要比 Android 響應(yīng)的快,所以iOS更流暢 云云 ·? ?然而這個(gè)東西是2.x時(shí)代的,Google早就改掉了……我也不知道這種 Unix 內(nèi)核性能優(yōu)于 Linux 的論調(diào)為什么時(shí)不時(shí)還會(huì)冒出來……反正兩者都不是實(shí)時(shí)操作系統(tǒng)(RTOS)。
(二)運(yùn)行時(shí)(Runtime) 1、Android 基于Java 虛擬機(jī),前段時(shí)間還因?yàn)檫@個(gè)Google和甲骨文吵上了法庭。算了回歸正題,我們主要要說的運(yùn)行時(shí)有 Dalvik 和 ART(Android Runtime)兩種,Dalvik 是 Android 于Android 4.4之前所使用的默認(rèn) Runtime,ART 則是 Android Runtime,是在 4.4 時(shí)引入的一種新的運(yùn)行時(shí),在 L及以上版本取代 Dalvik成為默認(rèn)運(yùn)行時(shí),在GC機(jī)制、JNI和Stack size上都與dalvik有著很大的不同。Dalvik 屬于 JIT(Jusi-in-time)編譯器,ART屬于AOT(Ahead-of-time)編譯器。反正說了這么多你們只需要知道ART可以直接調(diào)用底層效率更高就對了。 ·? ?其實(shí)是貼主 <編譯原理> 還沒啃熟你們不要打我嚶嚶嚶,有興趣的自己去看這兩個(gè)鏈接 ·? ?http://**/maz6uaq ·? ?http://**/nepu7vk
2、iOS 不開源,但是可以知道的是它的Object-C編譯器屬于GCC編譯套裝的一部分(感謝 @InflationAaron 指出:后期應(yīng)該是轉(zhuǎn)向了蘋果主導(dǎo)的 LLVM 編譯器)。
(三)渲染流水線 1、Android 3.0引入了應(yīng)用端繪圖的GPU加速(Hardware Canvas),Android 4.1 引入了黃油計(jì)劃(Project Butter),到4.1 可以說Android的渲染機(jī)制已經(jīng)足夠優(yōu)秀,只要按Design Guideline寫是輕松讓過渡動(dòng)畫達(dá)到60fps的。黃油計(jì)劃包括了: ·? ?窗口三重緩沖機(jī)制(降低連續(xù)丟幀可能性) ·? ?垂直同步機(jī)制(減小應(yīng)用端開始繪制到實(shí)際屏幕更新的延遲) ·? ?GL窗口緩存繪圖命令的異步執(zhí)行(減少應(yīng)用主線程的阻塞)
但很明顯Google還不滿足,于是在Android L 引入了獨(dú)立的GPU線程,并允許主線程和GPU線程并發(fā)。也就是說GPU線程在繪制第N幀的Display List時(shí),主線程已經(jīng)可以同時(shí)生成第N 1幀的Display List,并且允許GPU調(diào)用不同參數(shù)繪制同一個(gè)Display List,簡單的說就是提高了繪制過渡動(dòng)畫的效率。
這里說一個(gè) Google 的黑科技,Project Sky?- Dart on Android,完全脫離Java的一套東西,他們的目標(biāo)是把渲染時(shí)間壓縮到8ms以內(nèi),也就是等效120fps。但他們現(xiàn)在做出的Demo里每幀平均渲染時(shí)間是1.2ms/f,也就是等效驚人的 833fps……
2、iOS不開源……(又來了)但是,我們?nèi)匀豢梢酝茰y他的渲染流水線和WebKit類似,因?yàn)閃ebKit存在大量Apple的參與代碼。
3、總而言之,你們只需要知道Android和iOS是different but not better than each other就行了。只是在實(shí)現(xiàn)路線上有所不同,但實(shí)際上到最后都異曲同工。Google的Project Sky性能驚人,實(shí)際應(yīng)用有待觀查。
六、應(yīng)用,ROM(Android)以及其它 (一)This might be the most tedious part.
(二)應(yīng)用,講到這里就不想講了,算了,還是講一下吧: 1、BAT ·? ?Baidu,alibaba,tencent,號(hào)稱Android流暢度三大殺手 ·? ?這些大公司用戶太多太多了,導(dǎo)致他們必須兼容低版本的Android,無法利用新的API,導(dǎo)致卡頓: (1)QQ,節(jié)奏大師,Android 2.2,API level 8 (2)QQ瀏覽器,UC瀏覽器,Android 2.3,API level 9 (3)閑魚,支付寶,淘寶,百度,Android 4.0,API level 14 (4)微信,Android 4.0.3,API level 15
·? ?發(fā)現(xiàn)什么問題了沒有?引入黃油計(jì)劃的Android版本是4.1,所以60fps…… ·? ?然后QQ和節(jié)奏大師你們這還抱著凍酸奶的態(tài)度令我感動(dòng)……以及瀏覽器們都和姜餅曖昧不清……唉,連GPU加速都…… ·? ?然后如果打開開發(fā)者選項(xiàng)里面的show GPU overdraw(雖然不一定是GPU繪制的),你們就會(huì)發(fā)現(xiàn)各種嚴(yán)重的overdraw,尤其是阿里巴巴系列的應(yīng)用,整個(gè)頁面濫用Webview,導(dǎo)致了嚴(yán)重的重復(fù)繪制。 ·? ?BAT經(jīng)常大量使用自制控件進(jìn)一步加劇了對資源的使用。 ·? ?假如有第三方客戶端的話,其實(shí)往往有非常優(yōu)秀的遵守Design Guideline的應(yīng)用,比如新浪微博的第三方客戶端們,四次元,Fuubo,Smooth等等。
2、GCM,與那些推送的事情
·? ?GCM就是Google Cloud Messaging,是Google自家的推送服務(wù),也是絕大多數(shù) Android 應(yīng)用的推送服務(wù)。使用這個(gè)服務(wù),利用的是Google服務(wù)器統(tǒng)一推送,可以帶來及時(shí),省電,后臺(tái)不喚醒的推送體驗(yàn)。 ·? ?APNs 就是Apple Push Notification Service,Apple的推送服務(wù),與GCM類似,可以帶來良好的體驗(yàn),且是iOS上唯一的推送機(jī)制。 ·? ?然而由于某堵墻的存在,國內(nèi)并沒有辦法體驗(yàn)到GCM推送帶來的推送體驗(yàn)。所以部分手機(jī)廠商就開始做自己的推送機(jī)制,比如小米做的對齊喚醒和?MiPush,但是只對MIUI及兼容的部分應(yīng)用有用。 ·? ?剩下的就是其它諸多推送了,BAT自家的推送機(jī)制,極光,蝴蝶云,智游,個(gè)推等等。假如很不幸的,你的手機(jī)上安裝了BAT全套,又安裝了帶各種不同推送提供商的應(yīng)用,那就等著感人的耗電,內(nèi)存占用與無數(shù)的后臺(tái)喚醒吧……
3、優(yōu)化 ·? ?很不幸的是,到現(xiàn)在,兩個(gè)平臺(tái)都仍然有大量的應(yīng)用跑在單核單線程上,對雙核,多核以及64位的利用非常之低,甚至沒有。這個(gè)時(shí)候A8較高的單核性能能帶來更好的體驗(yàn)。但如果應(yīng)用對多核做好了適配的話,在Android上流暢性是可以花樣吊打iOS的。
4、流媒體視頻 ·? ?Android在這方面流暢度要好于iOS (1)Android支持傳統(tǒng)流媒體格式,可以用已經(jīng)成熟的CDN (2)iOS需要使用TS流,需要額外準(zhǔn)備CDN線路,部分線路支持還不佳 (3)Android 4.0后使用HLS協(xié)議并且實(shí)現(xiàn)P2P
5、?總結(jié)一下,Android流媒體性能較好,BAT是流暢度殺手,國內(nèi)混亂的推送有鍋。
(三)ROM 1、iOS并不存在這個(gè)問題,不講。 2、Android存在的問題是,有太多廠商太多版本的ROM了,每個(gè)廠商都對底層做些修改。所以簡而言之就是鬧心,負(fù)分優(yōu)化大家見得多了我就不說了。 ·? ?PS:知道為什么國內(nèi)定制越深度的ROM適配Android L越慢嗎?就是因?yàn)榈讓拥臇|西改得太多5.0把運(yùn)行時(shí)改了工程量很大難以在保證功能健全的情況下快速適配。 3、驅(qū)動(dòng)(不是很懂,希望補(bǔ)充)
七、最后我們來說說設(shè)計(jì) 1、iOS 的人機(jī)交互設(shè)計(jì)還是很值得稱道的,畢竟是帶領(lǐng)我們進(jìn)入了Multi Touch時(shí)代,從iOS 6的擬物到iOS 7/8/9的扁平 高斯模糊毛玻璃為代表的設(shè)計(jì)路線,都可以說是一套非常值得令人尊重的設(shè)計(jì)方案。它是比較早把流暢的動(dòng)畫引入設(shè)計(jì)語言的一個(gè)方案,也在長期的驗(yàn)證中逐漸發(fā)展成熟。
2、以Holo Theme為代表的Android Design,進(jìn)化出了Material Design,對整個(gè)UI的把控能力達(dá)到了一個(gè)非常高的水準(zhǔn)。陰影,漣漪波紋,Z軸等等,都顯示出Google對細(xì)節(jié)一絲不茍的把控,且這套UI比較好的解決了桌面,網(wǎng)頁,移動(dòng)端的交互統(tǒng)一性。 這個(gè)以后我會(huì)專門開一個(gè)帖子來寫。
八、總結(jié) 1、總之,對比下來我們會(huì)發(fā)現(xiàn),兩種生態(tài)在健康的情況下其實(shí)軟硬技術(shù)實(shí)力都是處在同一水平線上的,互有長短。硬件Apple并沒有弱于Android,更談不上軟件的神優(yōu)化。但是,如果Android沒有Google Services,就相當(dāng)于失去了Android的靈魂,失去了Google Play的優(yōu)秀資源,失去了GCM推送帶來的流暢省電,失去了Google Cloud在內(nèi)的很多很多核心競爭力。Android不卡,安卓會(huì)卡,本質(zhì)不是系統(tǒng)的問題,而是什么樣的環(huán)境,用戶著什么樣的程序。
2、iPhone就好像是一輛F1方程式賽車,里里外外都精心設(shè)計(jì)過。看起來只有1.6L的排量,但實(shí)際上卻是一顆上千馬力的心臟,但這也決定了他只能在專門設(shè)計(jì)的方程式賽道上跑,而且跑的很歡。一旦脫離賽道(越獄),就各種不安全。
3、Android則好像是各種其它跑車,硬件的定制化程度極高,既有入門級(jí)的現(xiàn)代Coupe,尚酷R,也有比肩F1的布加迪威航,法拉利,蘭博基尼,更有小眾的科林賽格,優(yōu)雅的瑪莎拉蒂等等……如果再適合他們的路況上跑,就算是入門級(jí),輕松破200km/h也不是什么難事,即使無法比肩F1,也足夠體驗(yàn)駕駛樂趣,旗艦則可以和F1全面硬抗,彎道,直道,加速,都能爭個(gè)高下,甚至還可以玩一些F1做不到的事情,比如彈射起步,漂移等等。
4、安卓則是……則是幾個(gè)改裝廠把這些跑車們自行改裝,有的廠商改的好,有的改成渣,拉到了坑洼不平的土路上,還時(shí)不時(shí)來點(diǎn)路障,這就算起步跑得溜,但久了對整車肯定不好。
感謝大家的閱讀。 以上。 8月7日 23:10
轉(zhuǎn)載于:https://my.oschina.net/weichou/blog/547674
總結(jié)
以上是生活随笔為你收集整理的关于 Android 和 iOS 流畅度的一切的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 比例调速阀AMESim仿真
- 下一篇: 【Android Studio】分类整理