你的位置:首頁(yè) > 測(cè)試測(cè)量 > 正文

“然并卵”人們總是對(duì)iOS和Android的流暢度有太多的誤解

發(fā)布時(shí)間:2015-08-18 責(zé)任編輯:echolady

【導(dǎo)讀】對(duì)于iOS和Android系統(tǒng),人們總是覺(jué)得Android系統(tǒng)用起來(lái)會(huì)出現(xiàn)卡頓現(xiàn)象,所以偏愛(ài)于iOS。事實(shí)上,人們都對(duì)iOS和Android系統(tǒng)有著太多的誤解,導(dǎo)致誤會(huì)越來(lái)越深。本文就來(lái)為你揭曉一切真相。

“然并卵”人們總是對(duì)iOS和Android的流暢度有太多的誤解
不是
“然并卵”人們總是對(duì)iOS和Android的流暢度有太多的誤解
我們應(yīng)該為這個(gè)世界的多樣性而感到慶幸,不是么?

一、什么是流暢?什么是卡頓?

如果我們討論流暢和卡是建立在不同的標(biāo)準(zhǔn)上,一定會(huì)變成毫無(wú)意義的口水戰(zhàn)。在這里,流暢我們定義為運(yùn)行程序時(shí)達(dá)到60fps或以上的繪制效率,且盡可能少丟幀??D我們定義為程序運(yùn)行時(shí)無(wú)法達(dá)到60fps,丟幀頻繁。

二、Apple和Android陣營(yíng)比是不是能帶來(lái)更流暢的應(yīng)用體驗(yàn)?

不是。兩者都非常順滑,用久了也都不卡頓。

Android定義為帶有GMS推送的,帶有良好Android應(yīng)用生態(tài)圈的(包括少數(shù)國(guó)內(nèi)優(yōu)秀應(yīng)用),具有GooglePlay服務(wù)的Android手機(jī),擁有健康使用習(xí)慣的Android。包括但不限于Nexus,Moto,SONY,LG,htc,Samsung在沒(méi)有封殺Google的市場(chǎng)的使用體驗(yàn)。

三、Apple和安卓陣營(yíng)比是不是能帶來(lái)更流暢的應(yīng)用體驗(yàn)?

是。安卓(尤其是用久了)很可能會(huì)卡頓。

安卓定義為不帶GMS推送的,缺失良好Android應(yīng)用生態(tài)的,不具有GooglePlay服務(wù)的,基于各種“深度優(yōu)化,深度定制,世界第一,跑分天王,etc.”家,配合“動(dòng)不動(dòng)就管家衛(wèi)士全家桶,清理內(nèi)存釋放手機(jī)速度,打敗全國(guó)百分之XX”的用戶的安卓生態(tài)。

四、Apple和Android陣營(yíng)硬件對(duì)比

Apple硬件處于一個(gè)什么樣的水平?足夠優(yōu)秀的水平,Apple是著名的硬件狂魔,并不是大家想的iPhone硬件遠(yuǎn)遠(yuǎn)不及Android陣營(yíng)。

1、Android陣營(yíng)目前的旗艦Soc之一是基于高通810的解決方案(MTK和三星,華為的解決方案不是很了解,歡迎補(bǔ)充。當(dāng)然業(yè)界一般認(rèn)為是三星的CPU14nm制程更先進(jìn),所以功耗發(fā)熱的表現(xiàn)較810更好。),它擁有8個(gè)CPU核心,20nm制程,主頻高達(dá)2GHz。810純CPU計(jì)算能力,并發(fā)計(jì)算能力優(yōu)于A8。但它頻率高,核心多,功耗和發(fā)熱量在密集計(jì)算時(shí)也會(huì)遠(yuǎn)高于A8,發(fā)熱會(huì)限制810的發(fā)揮。

2、CPUCache方面。

A8非??犊嘏鋫淞烁哌_(dá)64KB64KB的L1Cache,1MBL2Cache和4MBL3Cache,與上一代A7相同,810數(shù)據(jù)不明。但實(shí)際應(yīng)用來(lái)看,似乎810配備的Cache喂不飽8個(gè)核心,存在CacheMiss的情況。(有硬件信息的朋友歡迎補(bǔ)充)但是,即使沒(méi)有準(zhǔn)確數(shù)據(jù)的情況下,有一件事情也是可以確定的,那就是CacheperCore數(shù)據(jù)810絕對(duì)不如A8。如果要做到一樣的水平,那么810要配備128kbL1Cache,4MBL2Cache,16MBL3Cache。要知道的是,這么多的Cache即使是對(duì)于IntelCorei7也是很奢侈的。而如果假設(shè)810和A8配備了一樣的Cache,810的CacheperCore數(shù)據(jù)就很難看了。要知道,CPUCache的速度遠(yuǎn)高于RAM的速度,所以小Cache帶來(lái)的情況就是外圍I/O經(jīng)常處于等待狀態(tài),延遲了CPU計(jì)算能力的發(fā)揮。打個(gè)比方,你拿跑車引擎配個(gè)4速變速箱,引擎的能力就無(wú)法發(fā)揮了。Cache方面,A8表現(xiàn)優(yōu)于810。

3、GPU方面。

A8配備的PowerVRSeries6XTGX6450運(yùn)算能力是136.4Gflops(533MHz)/153.6GFlops(600MHz),稍微優(yōu)于801配備的Adreno330,Adreno430則是324~388.8GHz(600MHz)【水冷……】。畢竟當(dāng)時(shí)高通設(shè)計(jì)810的時(shí)候就是用來(lái)拖4k的,圖形性能Adreno430數(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ù)量了。帶來(lái)了A8極其兇殘的單核性能。810單核性能弱于A8。
[page]

五、系統(tǒng)與運(yùn)行機(jī)制層面

(一)內(nèi)核

1、又要開(kāi)始拿Linux和Unix說(shuō)事了,但很不幸的是,流暢這件事跟系統(tǒng)內(nèi)核一點(diǎn)關(guān)系都沒(méi)有。

2、說(shuō)個(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ì)冒出來(lái)……反正兩者都不是實(shí)時(shí)操作系統(tǒng)(RTOS)。

(二)運(yùn)行時(shí)(Runtime)

1、Android基于Java虛擬機(jī),前段時(shí)間還因?yàn)檫@個(gè)Google和甲骨文吵上了法庭。算了回歸正題,我們主要要說(shuō)的運(yùn)行時(shí)有Dalvik和ART(AndroidRuntime)兩種,Dalvik是Android于Android4.4之前所使用的默認(rèn)Runtime,ART則是AndroidRuntime,是在4.4時(shí)引入的一種新的運(yùn)行時(shí),在L及以上版本取代Dalvik成為默認(rèn)運(yùn)行時(shí),在GC機(jī)制、JNI和Stacksize上都與dalvik有著很大的不同。Dalvik屬于JIT(Jusi-in-time)編譯器,ART屬于AOT(Ahead-of-time)編譯器。反正說(shuō)了這么多你們只需要知道ART可以直接調(diào)用底層效率更高就對(duì)了。

2、iOS不開(kāi)源,但是可以知道的是它的Object-C編譯器屬于GCC編譯套裝的一部分(感謝@InflationAaron指出:后期應(yīng)該是轉(zhuǎn)向了蘋果主導(dǎo)的LLVM編譯器)。

(三)渲染流水線

1、Android3.0引入了應(yīng)用端繪圖的GPU加速(HardwareCanvas),Android4.1引入了黃油計(jì)劃(ProjectButter),到4.1可以說(shuō)Android的渲染機(jī)制已經(jīng)足夠優(yōu)秀,只要按DesignGuideline寫是輕松讓過(guò)渡動(dòng)畫達(dá)到60fps的。黃油計(jì)劃包括了:

●窗口三重緩沖機(jī)制(降低連續(xù)丟幀可能性)

●垂直同步機(jī)制(減小應(yīng)用端開(kāi)始繪制到實(shí)際屏幕更新的延遲)

●GL窗口緩存繪圖命令的異步執(zhí)行(減少應(yīng)用主線程的阻塞)

但很明顯Google還不滿足,于是在AndroidL引入了獨(dú)立的GPU線程,并允許主線程和GPU線程并發(fā)。也就是說(shuō)GPU線程在繪制第N幀的DisplayList時(shí),主線程已經(jīng)可以同時(shí)生成第N1幀的DisplayList,并且允許GPU調(diào)用不同參數(shù)繪制同一個(gè)DisplayList,簡(jiǎn)單的說(shuō)就是提高了繪制過(guò)渡動(dòng)畫的效率。

這里說(shuō)一個(gè)Google的黑科技,ProjectSky-DartonAndroid,完全脫離Java的一套東西,他們的目標(biāo)是把渲染時(shí)間壓縮到8ms以內(nèi),也就是等效120fps。但他們現(xiàn)在做出的Demo里每幀平均渲染時(shí)間是1.2ms/f,也就是等效驚人的833fps……

2、iOS不開(kāi)源……(又來(lái)了)但是,我們?nèi)匀豢梢酝茰y(cè)他的渲染流水線和WebKit類似,因?yàn)閃ebKit存在大量Apple的參與代碼。

3、總而言之,你們只需要知道Android和iOS是differentbutnotbetterthaneachother就行了。只是在實(shí)現(xiàn)路線上有所不同,但實(shí)際上到最后都異曲同工。Google的ProjectSky性能驚人,實(shí)際應(yīng)用有待觀查。

六、應(yīng)用,ROM(Android)以及其它


1、BAT

●Baidu,alibaba,tencent,號(hào)稱Android流暢度三大殺手

●這些大公司用戶太多太多了,導(dǎo)致他們必須兼容低版本的Android,無(wú)法利用新的API,導(dǎo)致卡頓:

(1)QQ,節(jié)奏大師,Android2.2,APIlevel8

(2)QQ瀏覽器,UC瀏覽器,Android2.3,APIlevel9

(3)閑魚,支付寶,淘寶,百度,Android4.0,APIlevel14

(4)微信,Android4.0.3,APIlevel15

●發(fā)現(xiàn)什么問(wèn)題了沒(méi)有?引入黃油計(jì)劃的Android版本是4.1,所以60fps……

●然后QQ和節(jié)奏大師你們這還抱著凍酸奶的態(tài)度令我感動(dòng)……以及瀏覽器們都和姜餅曖昧不清……唉,連GPU加速都……

●然后如果打開(kāi)開(kāi)發(fā)者選項(xiàng)里面的showGPUoverdraw(雖然不一定是GPU繪制的),你們就會(huì)發(fā)現(xiàn)各種嚴(yán)重的overdraw,尤其是阿里巴巴系列的應(yīng)用,整個(gè)頁(yè)面濫用Webview,導(dǎo)致了嚴(yán)重的重復(fù)繪制。

●BAT經(jīng)常大量使用自制控件進(jìn)一步加劇了對(duì)資源的使用。

●假如有第三方客戶端的話,其實(shí)往往有非常優(yōu)秀的遵守DesignGuideline的應(yīng)用,比如新浪微博的第三方客戶端們,四次元,F(xiàn)uubo,Smooth等等。

2、GCM,與那些推送的事情

●GCM就是GoogleCloudMessaging,是Google自家的推送服務(wù),也是絕大多數(shù)Android應(yīng)用的推送服務(wù)。使用這個(gè)服務(wù),利用的是Google服務(wù)器統(tǒng)一推送,可以帶來(lái)及時(shí),省電,后臺(tái)不喚醒的推送體驗(yàn)。

●APNs就是ApplePushNotificationService,Apple的推送服務(wù),與GCM類似,可以帶來(lái)良好的體驗(yàn),且是iOS上唯一的推送機(jī)制。

●然而由于某堵墻的存在,國(guó)內(nèi)并沒(méi)有辦法體驗(yàn)到GCM推送帶來(lái)的推送體驗(yàn)。所以部分手機(jī)廠商就開(kāi)始做自己的推送機(jī)制,比如小米做的對(duì)齊喚醒和MiPush,但是只對(duì)MIUI及兼容的部分應(yīng)用有用。

●剩下的就是其它諸多推送了,BAT自家的推送機(jī)制,極光,蝴蝶云,智游,個(gè)推等等。假如很不幸的,你的手機(jī)上安裝了BAT全套,又安裝了帶各種不同推送提供商的應(yīng)用,那就等著感人的耗電,內(nèi)存占用與無(wú)數(shù)的后臺(tái)喚醒吧……
[page]

3、優(yōu)化

●很不幸的是,到現(xiàn)在,兩個(gè)平臺(tái)都仍然有大量的應(yīng)用跑在單核單線程上,對(duì)雙核,多核以及64位的利用非常之低,甚至沒(méi)有。這個(gè)時(shí)候A8較高的單核性能能帶來(lái)更好的體驗(yàn)。但如果應(yīng)用對(duì)多核做好了適配的話,在Android上流暢性是可以花樣吊打iOS的。

4、流媒體視頻

●Android在這方面流暢度要好于iOS

(1)Android支持傳統(tǒng)流媒體格式,可以用已經(jīng)成熟的CDN

(2)iOS需要使用TS流,需要額外準(zhǔn)備CDN線路,部分線路支持還不佳

(3)Android4.0后使用HLS協(xié)議并且實(shí)現(xiàn)P2P

(三)ROM

1、iOS并不存在這個(gè)問(wèn)題,不講。

2、Android存在的問(wèn)題是,有太多廠商太多版本的ROM了,每個(gè)廠商都對(duì)底層做些修改。所以簡(jiǎn)而言之就是鬧心,負(fù)分優(yōu)化大家見(jiàn)得多了我就不說(shuō)了。

PS:知道為什么國(guó)內(nèi)定制越深度的ROM適配AndroidL越慢嗎?就是因?yàn)榈讓拥臇|西改得太多5.0把運(yùn)行時(shí)改了工程量很大難以在保證功能健全的情況下快速適配。

3、驅(qū)動(dòng)(不是很懂,希望補(bǔ)充)

七、最后我們來(lái)說(shuō)說(shuō)設(shè)計(jì)

1、iOS的人機(jī)交互設(shè)計(jì)還是很值得稱道的,畢竟是帶領(lǐng)我們進(jìn)入了MultiTouch時(shí)代,從iOS6的擬物到iOS7/8/9的扁平高斯模糊毛玻璃為代表的設(shè)計(jì)路線,都可以說(shuō)是一套非常值得令人尊重的設(shè)計(jì)方案。它是比較早把流暢的動(dòng)畫引入設(shè)計(jì)語(yǔ)言的一個(gè)方案,也在長(zhǎng)期的驗(yàn)證中逐漸發(fā)展成熟。

2、以HoloTheme為代表的AndroidDesign,進(jìn)化出了MaterialDesign,對(duì)整個(gè)UI的把控能力達(dá)到了一個(gè)非常高的水準(zhǔn)。陰影,漣漪波紋,Z軸等等,都顯示出Google對(duì)細(xì)節(jié)一絲不茍的把控,且這套UI比較好的解決了桌面,網(wǎng)頁(yè),移動(dòng)端的交互統(tǒng)一性。

八、總結(jié)

1、總之,對(duì)比下來(lái)我們會(huì)發(fā)現(xiàn),兩種生態(tài)在健康的情況下其實(shí)軟硬技術(shù)實(shí)力都是處在同一水平線上的,互有長(zhǎng)短。硬件Apple并沒(méi)有弱于Android,更談不上軟件的神優(yōu)化。但是,如果Android沒(méi)有GoogleServices,就相當(dāng)于失去了Android的靈魂,失去了GooglePlay的優(yōu)秀資源,失去了GCM推送帶來(lái)的流暢省電,失去了GoogleCloud在內(nèi)的很多很多核心競(jìng)爭(zhēng)力。不卡或會(huì)卡,本質(zhì)不是系統(tǒng)的問(wèn)題,而是什么樣的環(huán)境,用戶著什么樣的程序。

2、iPhone就好像是一輛F1方程式賽車,里里外外都精心設(shè)計(jì)過(guò)??雌饋?lái)只有1.6L的排量,但實(shí)際上卻是一顆上千馬力的心臟,但這也決定了他只能在專門設(shè)計(jì)的方程式賽道上跑,而且跑的很歡。一旦脫離賽道(越獄),就各種不安全。

3、Android則好像是各種其它跑車,硬件的定制化程度極高,既有入門級(jí)的現(xiàn)代Coupe,尚酷R,也有比肩F1的布加迪威航,法拉利,蘭博基尼,更有小眾的科林賽格,優(yōu)雅的瑪莎拉蒂等等……如果再適合他們的路況上跑,就算是入門級(jí),輕松破200km/h也不是什么難事,即使無(wú)法比肩F1,也足夠體驗(yàn)駕駛樂(lè)趣,旗艦則可以和F1全面硬抗,彎道,直道,加速,都能爭(zhēng)個(gè)高下,甚至還可以玩一些F1做不到的事情,比如彈射起步,漂移等等。

4、安卓則是……則是幾個(gè)改裝廠把這些跑車們自行改裝,有的廠商改的好,有的改成渣,拉到了坑洼不平的土路上,還時(shí)不時(shí)來(lái)點(diǎn)路障,這就算起步跑得溜,但久了對(duì)整車肯定不好。

相關(guān)閱讀:

逆天設(shè)計(jì):蘋果新Touch ID讓Android好無(wú)語(yǔ)
視頻完爆差異化:蘋果 CarPlay VS 谷歌 Android Auto
五問(wèn)五答摸清Android Wear手表“疑難雜癥”

要采購(gòu)晶體么,點(diǎn)這里了解一下價(jià)格!
特別推薦
技術(shù)文章更多>>
技術(shù)白皮書下載更多>>
熱門搜索
?

關(guān)閉

?

關(guān)閉