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