誰(shuí)說(shuō)Android沒(méi)有iOS流暢?關(guān)于Android和iOS流暢度的一切 寫(xiě)在前面的一些話(huà): 在糾結(jié)了很久以后,我決定來(lái)寫(xiě)寫(xiě) iOS 和 Android,也算是對(duì)自己近幾年來(lái)學(xué)習(xí)成果的一個(gè)總結(jié)。這個(gè)話(huà)題非常大,本人雖盡我所能查證來(lái)源,但也難免會(huì)有疏漏,有的話(huà)歡迎指出。 :)如果覺(jué)得概念太多看不下去就直接看加粗部分就夠了。我希望大家讀完后,是這樣的: 而不是: 我們應(yīng)該為這個(gè)世界的多樣性而感到慶幸,不是么? 一、什么是流暢?什么是卡頓? 如果我們討論流暢和卡是建立在不同的標(biāo)準(zhǔn)上,一定會(huì)變成毫無(wú)意義的口水戰(zhàn)。在這里,流暢我們定義為運(yùn)行程序時(shí)達(dá)到 60fps 或以上的繪制效率,且盡可能少丟幀。卡頓我們定義為程序運(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)用),具有 Google Play 服務(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)的,不具有 Google Play 服務(wù)的,基于各種“深度優(yōu)化,深度定制,世界第一,跑分天王,etc.” 家,配合 “動(dòng)不動(dòng)就管家衛(wèi)士全家桶,清理內(nèi)存釋放手機(jī)速度,打敗全國(guó)百分之XX” 的用戶(hù)的 安卓生態(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)為是三星的 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)用來(lái)看,似乎 810 配備的 Cache 喂不飽 8個(gè)核心,存在 Cache Miss 的情況。(有硬件信息的朋友歡迎補(bǔ)充)但是,即使沒(méi)有準(zhǔn)確數(shù)據(jù)的情況下,有一件事情也是可以確定的,那就是 Cache per Core數(shù)據(jù) 810 絕對(duì)不如 A8。如果要做到一樣的水平,那么 810 要配備 128kb L1 Cache,4MB L2 Cache,16MB L3 Cache。要知道的是,這么多的 Cache 即使是對(duì)于 Intel Core i7 也是很奢侈的。而如果假設(shè) 810 和 A8 配備了一樣的Cache,810 的 Cache per Core 數(shù)據(jù)就很難看了。要知道,CPU Cache 的速度遠(yuǎn)高于 RAM 的速度,所以小 Cache 帶來(lái)的情況就是 外圍 I/O 經(jīng)常處于等待狀態(tài),延遲了 CPU 計(jì)算能力的發(fā)揮。打個(gè)比方,你拿跑車(chē)引擎配個(gè) 4 速變速箱,引擎的能力就無(wú)法發(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í)候就是用來(lái)拖 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ù)量了。帶來(lái)了 A8 極其兇殘的單核性能。810 單核性能弱于 A8。 五、系統(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(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)編譯器。反正說(shuō)了這么多你們只需要知道 ART 可以直接調(diào)用底層效率更高就對(duì)了。 ● 其實(shí)是我 還沒(méi)啃熟你們不要打我嚶嚶嚶,有興趣的自己去看這兩個(gè)鏈接 ● http://tinyurl.com/maz6uaq ● http://tinyurl.com/nepu7vk 2、iOS 不開(kāi)源,但是可以知道的是它的 Object-C 編譯器屬于 GCC 編譯套裝的一部分(感謝 @InflationAaron 指出:后期應(yīng)該是轉(zhuǎn)向了蘋(píng)果主導(dǎo)的 LLVM 編譯器)。 (三)渲染流水線 1、Android 3.0 引入了應(yīng)用端繪圖的 GPU 加速(Hardware Canvas),Android 4.1 引入了黃油計(jì)劃(Project Butter),到 4.1 可以說(shuō) Android 的渲染機(jī)制已經(jīng)足夠優(yōu)秀,只要按 Design Guideline 寫(xiě)是輕松讓過(guò)渡動(dòng)畫(huà)達(dá)到 60fps 的。黃油計(jì)劃包括了: ● 窗口三重緩沖機(jī)制(降低連續(xù)丟幀可能性) ● 垂直同步機(jī)制(減小應(yīng)用端開(kāi)始繪制到實(shí)際屏幕更新的延遲) ● GL 窗口緩存繪圖命令的異步執(zhí)行(減少應(yīng)用主線程的阻塞) 但很明顯 Google 還不滿(mǎn)足,于是在 Android L 引入了獨(dú)立的 GPU 線程,并允許主線程和 GPU 線程并發(fā)。也就是說(shuō)GPU線程在繪制第 N 幀的 Display List 時(shí),主線程已經(jīng)可以同時(shí)生成第 N 1 幀的 Display List,并且允許 GPU 調(diào)用不同參數(shù)繪制同一個(gè) Display List,簡(jiǎn)單的說(shuō)就是提高了繪制過(guò)渡動(dòng)畫(huà)的效率。 這里說(shuō)一個(gè) Google 的黑科技,Project Sky - Dart on Android,完全脫離 Java 的一套東西,他們的目標(biāo)是把渲染時(shí)間壓縮到 8ms 以?xún)?nèi),也就是等效 120fps。但他們現(xiàn)在做出的 Demo 里每幀平均渲染時(shí)間是 1.2ms/f,也就是等效驚人的 833fps…… 2、iOS 不開(kāi)源……(又來(lái)了)但是,我們?nèi)匀豢梢酝茰y(cè)他的渲染流水線和 WebKit 類(lèi)似,因?yàn)?WebKit 存在大量 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)稱(chēng) Android 流暢度三大殺手 ● 這些大公司用戶(hù)太多太多了,導(dǎo)致他們必須兼容低版本的 Android,無(wú)法利用新的 API,導(dǎo)致卡頓: (1)QQ,節(jié)奏大師,Android 2.2,API level 8 (2)QQ瀏覽器,UC瀏覽器,Android 2.3,API level 9 (3)閑魚(yú),支付寶,淘寶,百度,Android 4.0,API level 14 (4)微信,Android 4.0.3,API level 15 ● 發(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)里面的 show GPU overdraw(雖然不一定是 GPU 繪制的),你們就會(huì)發(fā)現(xiàn)各種嚴(yán)重的 overdraw,尤其是阿里巴巴系列的應(yīng)用,整個(gè)頁(yè)面濫用 Webview,導(dǎo)致了嚴(yán)重的重復(fù)繪制。 ● BAT 經(jīng)常大量使用自制控件進(jìn)一步加劇了對(duì)資源的使用。 ● 假如有第三方客戶(hù)端的話(huà),其實(shí)往往有非常優(yōu)秀的遵守 Design Guideline 的應(yīng)用,比如新浪微博的第三方客戶(hù)端們,四次元,F(xiàn)uubo,Smooth等等。 2、GCM,與那些推送的事情 ● GCM 就是 Google Cloud Messaging,是 Google 自家的推送服務(wù),也是絕大多數(shù) Android 應(yīng)用的推送服務(wù)。使用這個(gè)服務(wù),利用的是 Google 服務(wù)器統(tǒng)一推送,可以帶來(lái)及時(shí),省電,后臺(tái)不喚醒的推送體驗(yàn)。 ● APNs 就是 Apple Push Notification Service,Apple 的推送服務(wù),與 GCM 類(lèi)似,可以帶來(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)喚醒吧…… 3、優(yōu)化 ● 很不幸的是,到現(xiàn)在,兩個(gè)平臺(tái)都仍然有大量的應(yīng)用跑在單核單線程上,對(duì)雙核,多核以及 64 位的利用非常之低,甚至沒(méi)有。這個(gè)時(shí)候 A8 較高的單核性能能帶來(lái)更好的體驗(yàn)。但如果應(yīng)用對(duì)多核做好了適配的話(huà),在 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 (三)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 適配 Android L 越慢嗎?就是因?yàn)榈讓拥臇|西改得太多 5.0 把運(yùn)行時(shí)改了工程量很大難以在保證功能健全的情況下快速適配。 3、驅(qū)動(dòng)(不是很懂,希望補(bǔ)充) 七、最后我們來(lái)說(shuō)說(shuō)設(shè)計(jì) 1、iOS 的人機(jī)交互設(shè)計(jì)還是很值得稱(chēng)道的,畢竟是帶領(lǐng)我們進(jìn)入了 Multi Touch 時(shí)代,從 iOS 6 的擬物到 iOS 7/8/9 的扁平 高斯模糊毛玻璃為代表的設(shè)計(jì)路線,都可以說(shuō)是一套非常值得令人尊重的設(shè)計(jì)方案。它是比較早把流暢的動(dòng)畫(huà)引入設(shè)計(jì)語(yǔ)言的一個(gè)方案,也在長(zhǎng)期的驗(yàn)證中逐漸發(fā)展成熟。 2、以 Holo Theme 為代表的 Android Design,進(jìn)化出了 Material Design,對(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)有 Google Services,就相當(dāng)于失去了 Android 的靈魂,失去了 Google Play 的優(yōu)秀資源,失去了 GCM 推送帶來(lái)的流暢省電,失去了 Google Cloud 在內(nèi)的很多很多核心競(jìng)爭(zhēng)力。不卡或會(huì)卡,本質(zhì)不是系統(tǒng)的問(wèn)題,而是什么樣的環(huán)境,用戶(hù)著什么樣的程序。 2、iPhone 就好像是一輛 F1 方程式賽車(chē),里里外外都精心設(shè)計(jì)過(guò)。看起來(lái)只有 1.6L 的排量,但實(shí)際上卻是一顆上千馬力的心臟,但這也決定了他只能在專(zhuān)門(mén)設(shè)計(jì)的方程式賽道上跑,而且跑的很歡。一旦脫離賽道(越獄),就各種不安全。 3、Android 則好像是各種其它跑車(chē),硬件的定制化程度極高,既有入門(mén)級(jí)的現(xiàn)代 Coupe,尚酷 R,也有比肩 F1 的布加迪威航,法拉利,蘭博基尼,更有小眾的科林賽格,優(yōu)雅的瑪莎拉蒂等等……如果再適合他們的路況上跑,就算是入門(mén)級(jí),輕松破 200km/h 也不是什么難事,即使無(wú)法比肩 F1,也足夠體驗(yàn)駕駛樂(lè)趣,旗艦則可以和 F1 全面硬抗,彎道,直道,加速,都能爭(zhēng)個(gè)高下,甚至還可以玩一些 F1 做不到的事情,比如彈射起步,漂移等等。 4、安卓則是……則是幾個(gè)改裝廠把這些跑車(chē)們自行改裝,有的廠商改的好,有的改成渣,拉到了坑洼不平的土路上,還時(shí)不時(shí)來(lái)點(diǎn)路障,這就算起步跑得溜,但久了對(duì)整車(chē)肯定不好。 |
其他的手機(jī)我是不知道,我用的是紅米手機(jī),對(duì)于深度定制我是真正的明白他們?cè)诙ㄖ剖裁戳恕?br />
所謂的深度定制,無(wú)非是內(nèi)置的應(yīng)用能夠最隱蔽的搜集、記錄、上傳用戶(hù)的一切信息到他們的大數(shù)據(jù)存儲(chǔ)中心罷了。 一個(gè)收音機(jī)應(yīng)用幾乎申請(qǐng)全部系統(tǒng)權(quán)限、一個(gè)錄音機(jī)幾乎申請(qǐng)全部系統(tǒng)權(quán)限、一個(gè)圖片瀏覽器全系統(tǒng)權(quán)限獲取、、、、、然后除非換系統(tǒng),不然根本沒(méi)法移除那些應(yīng)用(各應(yīng)用相互牽連)。 我也不想多說(shuō)了。。。。。。 這就是紅米的“深度定制”。 然后,曾經(jīng)看過(guò)三*的手機(jī)、沒(méi)煮的手機(jī),也是各種內(nèi)置軟件各種盜竊。。。。。 深度定制,我已經(jīng)呵呵了。 至于蘋(píng)果,咱沒(méi)那么多腎沒(méi)用過(guò)所以不懂不評(píng)論了。 對(duì)于安卓系統(tǒng),我想說(shuō)的是,同樣的硬件價(jià)格,同樣的四和處理器、同樣的2GB內(nèi)存,在Windows面前安卓我真的也呵呵了。有種安卓系統(tǒng)別用PC編寫(xiě)安卓的應(yīng)用再來(lái)說(shuō)他的系統(tǒng)怎么樣吧。 現(xiàn)在的世界,我看到的我現(xiàn)在理解為“花更高的代價(jià)再次做同一件事”。 |
嵌入式系統(tǒng)實(shí)訓(xùn)課程學(xué)習(xí), 讓沒(méi)有ARM編程基礎(chǔ)和實(shí)際工作經(jīng)驗(yàn)的大專(zhuān)以上學(xué)歷的學(xué)員在2到3個(gè)月的時(shí)間內(nèi)迅速獲得1-3年的ARM開(kāi)發(fā)經(jīng)驗(yàn), 具備實(shí)際ARM開(kāi)發(fā)的能力,月薪5-10K。想學(xué)習(xí)嵌入式、Linux、單片機(jī)等私聊。Q2532176025 13397813997黃! |