為什麼 iPhone 配置不算最高卻可以保證遊戲等應用流暢運用?
有的安卓手機配置比 iPhone 高很多卻不能做到遊戲流暢。是優化的關係么?
——2012-11-12的原答案——
我對這個問題下面的絕大多數答案深感震驚,什麼叫iPhone配置不算最高?請找出一個比PowerVR SGX543系列更強勁的主流移動GPU出來謝謝。
在內存充足,CPU不成為明顯瓶頸的狀態下,GPU難道不是遊戲流暢運行的決定性因素嗎?——2014-10-23更新——
兩年過去了,現在的Android設備圖形性能已奮起直追,與iOS設備呈狗斗之勢。用戶評價中,類似問題的觀點也逐漸消失。千元內使用MTK6592的Android多數遊戲基本能做到流暢,當然大作還是差口氣。而當年一騎絕塵的4s,不少卡牌遊戲已經有可察覺的掉幀。不過Apple依然保持了發布時的圖形性能優勢,雖然較之兩年前,這個優勢已經並不明顯了。(請無視第一名,那是個厚重的平板,賣點就是遊戲。)如果問題是針對 android 和 iPhone 而言,那麼 @孫大同 的回答已經囊括了主要的原因。
下面補充幾句:
一個重要的觀點:遊戲在手機上運行地順暢,是遊戲開發者的責任。
任何遊戲設計者,都應該根據手機的性能,設計能在該手機上流暢運行的遊戲,因為遊戲運行地流暢與否,是關係到遊戲體驗好壞的一個重要因素。事實上,所有的主機遊戲(console game),都不可能會出現遊戲不流暢到讓玩家感覺不舒服的情況。再回到iPhone和android平台上來,@孫大同 提到了兩點:
一是程序執行的性質不一樣
Phone是直接執行編譯好的代碼的,而android的如果用java,需要通過一個中間的解釋過程才能運行,導致效率不高,這個是java的一個通病。如果用詞有點偏專業了可以這樣理解:iPhone的拿到寫著命令的紙條時,馬上就可以執行了,而用java的android程序就需要拿著這紙條去問第三個人,請他翻譯了之後才能執行。
關於這一點,如果遊戲開發者對平台重視的話,可以一樣在android平台開發除跟iPhone一樣性質的程序。然而,這種方式成本較高。
關於第一點,只有在android上面的遊戲是從iPhone上面的移植過來的才成立。根據上面的觀點,如果是從一開始就是以android的某個機型所設計的,則不可能出現由java引起的性能問題。
二是android的開放性質和iOS的不開放性質。
所謂的開發和不開放,就是指android這個系統可以安裝在各種符合要求的手機上面,而iOS則只能安裝在蘋果自行開發的機器上面。結果就是android系統的設備有千千萬萬種,而iOS系統的設備就只有那相近的10來種。
而對於遊戲開發者而言,這種結果就導致了在android上面開發,測試極其困難,因此只能在比較主流的幾個機器上面測試,保證這幾個機器的運行效果。這同時也就造成了其餘沒有經過嚴格測試的機型效果良莠不齊。所以說,遊戲開發者要針對android系統設計遊戲,是十分困難的,只能對某幾款主流機型保證運行效果。然而一當選擇了針對機型,就不可能會存在運行不流暢的情況,這是設計的問題。總結一下吧。
1)遊戲開發者如果針對某幾款機器型號(不是操作系統)來設計遊戲,則遊戲不應該出現運行不流暢的情況。2)由於android系統開發的特性,設備過多,因而遊戲開發者不可能針對所有的機器型號進行開發,因此不同機器上面運行結果各異。3)由於android上很多遊戲本身是為iPhone設計,然後才移植過來的,因此有可能在設計上無法在android的很好地運行。對於這種情況,遊戲開發者可能會通過降低遊戲效果來保證運行效果。說系統架構和虛擬機的全都是老生常談,空談而不切實際,沒到點子上。看了這麼多我實在是看不下去了,簡單地說幾句好了。
第一點是java與objective-C的關係,這點大夥都說過,我不重複。
第二點是GPU——許多安卓ROM對GPU的支持還很爛。尤其是2.3及更老版本的系統,經我測試,許多帶有大量視覺效果的遊戲甚至還嚴重依賴於CPU的運算(比如在我的機器上,OSU和極品13,在2.3時,CPU1GHz的表現與1.7G的表現完全不同。而在4.0時,感覺不到區別。順帶一提我用的ROM,無論2.3還是4.0,在同型號里絕對是流暢度、穩定性和速度都是數一數二的,我沒法證明,但請你相信。)第三點也是目前大家還沒有提到的——許多安卓用戶天天在後台掛著自動殺進程的程序。安卓系統設計了許多不同的事件,程序可以在檢測到觸發這些事件的時候自動運行,而恰巧許多程序利用了這一點。所以構成了——數個程序自啟,被殺。再起,再被殺——這樣的惡性循環,消耗大量CPU時間。
第四點也是大家還沒有提到的——有許多用戶特別喜歡APP2SD,然而他們卻不知道他們的劣質SD卡的讀寫速度遠遠達不到要求。在加上第三點的共同作用,於是CPU和SD卡都構成了相當大的負擔。第五點,RAM「實際可用」的容量大小。許多用戶沒能理解安卓的內存機制,卻又試圖動手修改它,導致了RAM要麼沒法被充分利用,要麼老是擠得滿滿的。還有一個很多人都沒有注意到的因素,顯卡
從iphone4s/ipad2開始,在同一時代,iOS設備總是擁有最快的GPU
iphone 5用的是SGX 543 MP3(頻率266mhz,和ipad3的SGX 543 MP4性能相同)
ipad 4用的是SGX 554 MP4,性能是ipad3的SGX 543 MP4的兩倍同時代的只有Oualcomm Snapdragon S4 APQ8064 的Adreno 320可以提供和SGX 543 MP4一致的性能
Android設備中GPU最快的還有一個Nexus 10採用的Exynos 5250,使用了Mali T604,性能也只有Adreno 320的程度----------------
iphone 4s與ipad 2/ipad mini使用的是200mhz的SGX 543 MP2
也是這樣,GPU的性能大致也是要比同時期的Android設備快一倍------------
當然,最關鍵的是vsync(以及相應的畫面渲染高優先順序的系統設置)以及三重緩存的作用所以你會注意到android從4.1開始,能提供和iOS一致的流暢程度不得不說,這個問題不存在,而且大家很多人的回復也來自於誤區。
誤區一:iPhone 的硬體配置不算高。
答:這是絕對錯誤的,iPhone 每一代的硬體配置,在發布的當時,都高於其他同行手機系統的旗艦級別,如果運行跑分軟體的話,CPU基本上跟android 旗艦差不多,GPU秒殺android旗艦,IO基本上不輸任何android旗艦,整體綜合跑分必定高於多數廠家的旗艦。誤區二:android 程序用 java 寫的,所以效率低。
解說:這也是非常錯誤的,首先 java 的效率沒有數量級上的差別,因而在普通界面上不會有用戶能夠察覺的影響,另外更重要的一點是:絕大多數 android 遊戲不是使用 java 寫的,而是使用 android NDK 原生代碼編譯的,換句話說他們使用的是 C 語言,與 java 無關。綜上所述,iPhone 運行流暢的原因是:
一:iPhone 硬體配置本身就是旗艦級別。二:硬體配置不夠格的 android 機型在市面上實在太多了,所以造成了 android 手機性能低下的『刻板印象』,在這個反襯下,越發顯得 iPhone 流暢。其實,如果把硬體配置低於 iPhone 的 android 手機全部屏蔽掉,再來談流暢度,那誰上面玩遊戲流暢還真的只取決於遊戲軟體開發商自己。。。我來斗膽回答一下吧,其實我在這方面不是專家,只是略有了解而已。
- iPhone的應用開發語言是Objective-C,編譯是先用LLVM轉換成中間語言再用Clang編譯,兩個東西都是蘋果出品,自然對iPhone的硬體和軟體有相當的優化,另外代碼執行過程中不需要虛擬機在中間插手,執行效率自然很高(據說現在LLVM編譯出來的Obj-C代碼已經接近C的性能了,未試驗)。另外Cocoa Touch不提供GC,充其量現在有了一個半自動的「自動引用計數」,這部分省下來的CPU資源不可忽視。另外CoreAnimation部分就幾乎變成了全C,連OO的額外開銷都省了,同時還有有GPU硬體加速,想不流暢都難。
- Android的絕大部分應用都是使用Java語言開發(當然也可以寫C擴展,不過這是一種捨近求遠的做法。而且UI部分你只能用Java來寫。),Android當初這麼做的確極大的降低了應用開發的難度和成本,但是由於Davlik在中間「夾了一層」,應用調用渲染類函數時性能會受到很大影響,這一點應該是最主要的
- 蘋果一直很注重開發者的素質,記得蘋果有一篇寫給開發者的指南文章,裡面詳細的告訴你哪些事鼓勵你做,哪些事不鼓勵你做,哪些事你必須這麼做,哪些事禁止這麼做。如果你不遵守蘋果的要求,對不起,你不能上架。蘋果用這種方法保證了App Store中的應用個個都是精品(當然執行效率高也包含在精品之內)
- 還是那一點,Android選擇了Java作為開發語言,問題是程序員水平良莠不齊,谷歌的做法就是你只要敢寫,我就敢讓你上架。而那些隨隨便便寫幾行代碼執行效率卻異常低下的代碼自然拖了Android的後腿。
說了半天,最根本的原因還是產品線的問題。蘋果的產品數量很少,蘋果可以為每一款產品,每一塊CPU定製最適合它的代碼,讓產品的硬體性能發揮到極致。而Android產品線太廣,廠商更多做的是「讓系統跑起來」而不是「讓系統以最高的效率跑起來」。
Android手機耗電量大也可以從類似的角度來解釋,道理是一樣的。這是個錯覺,配置不算高??這……配置一點都不算低,那A7舉例,A7的晶體管數量,比高通的801可是多出不少,CPU的性能最關鍵的是晶體管數,什麼核數,主頻給你的感覺是不算高但實際上A7單核性能秒801一條街都不止,因為iOS沒有後台,所以四核或者八核的多任務能力,對iOS作用不大。同時也不用大的運存,加上gpu超強的性能,流暢是必然啊!!最後重複一遍,iPhone的配置一點都不低。
iOS設備的GPU部分一直都是領先安卓的
對於是否單任務我覺得不太重要,單任務多任務的區別只在內存和cpu佔用方面體現較大,而目前提到的問題均是系統優化、遊戲設計、適配方面遇到的問題,iphone 3gs的配置僅相當於目前2k出頭的android手機,甚至還不如,但程序和遊戲都跑的很快。我比較同意上面說的,主要有幾點
1、機型適配
2、系統架構,開發語言3、系統優化贊同@Yop的觀點,首先安卓平台碎片化嚴重,相同的系統版本不同廠商的硬體優化方向不一致(我最近在優化一個3D遊戲,但發現三星和moto的優化方向是相反的,一個對頂點數敏感,一個對渲染批次敏感),這就讓開發者後期產品優化的代價提高很多。而且兩個平台的盈利水平差很多(付費轉化率),這樣對於中小開發者來說會把更多的經歷投入到IOS上來,我想這也是一個原因吧。
我很好奇這個問題里說 iPhone GPU 如何高的是不是審題有問題, 還是又發生了群體性閱讀障礙綜合症.
「有的安卓手機配置比 iPhone 高很多卻不能做到遊戲流暢」比 iPhone original, 3G, 3GS 性能高的 Android 多了去了, 而且可以高很多. 遊戲不流暢的問題有嗎? 當然有.兩年前還在用 iPod touch 2 的時候, 假期路過魅族體驗店就去玩了會 M9, 結果第一次 Fruit Ninja Zen Mode 低於 200 分, 失誤頻頻. iPod touch 2 使用的是 ARM11 處理器, 顯卡 PowerVR MBX Lite, 寒酸得不能再寒酸, 日常使用也非常慢. M9 使用的是 C110+SGX540, 和 iPhone 4/Nexus S 一樣, 屬於頂級單核.vsync, 不同機種優化, 硬體加速支持都很可能, 但觸摸屏的反應速度也是非常重要的原因. 手機上的休閑小遊戲對操作的反應時間要求並不比主機低, 哪怕是 Angry Birds.
當然, Objective-C 和 Java 的對比確實很傻.好像看到過一篇文章說,iphone在渲染UI時會暫停所有正在運行的其他進程,來保證UI的快速渲染,但是android則沒有這樣的機制,因此體驗會不一樣。
技術方面大家總結的很多了,但根結上覺得還是初始思路和目標的問題。蘋果對產品的性能要求,用戶的體驗,都是開始就確定的,不達到要求的東西,一般情況估計我們見不到。但andrio平台產品應該沒這麼苛刻的要求,我相信andrio上面也有精品,但擴展到大範圍就普遍不行了。
1 軟硬體封閉,保證架構的絕對統一 2 優秀的引擎 3 完美的資源回收機制,這點和開發語言有關
優化最重要,看看同時代的遊戲主機和pc的對比結果就知道了,就那麼幾個硬體配置,遊戲廠商根據這配置寫遊戲能不快?看看安卓,硬體配置幾千種了,誰給你負責任優化?
iphone的gpu一直很厲害。
大部分人的安卓設備都是被ip碾壓的等級,才造成這種感覺。還有安卓上一票毒瘤軟體,各種吃內存各種自啟各種喚醒。所以我現在是安卓8974 2g加iPhone6,1
iphone配置一直在同代里最強啊。。。只是沒直接比拼核數罷了
純外行,純個人感受。覺得ios不是真正的多任務,在執行一個程序的時候可以佔用很多內存。另外ios應該是相對封閉系統優化做得好。遊戲軟體做了專門針對GPU的優化。
因為開發iphone遊戲真的能賺錢
推薦閱讀:
※iPhone5s【ios8】鎖屏密碼忘了,但是又不想刷機(畢竟有重要資料)……怎麼辦?
※一些通過 「腦波」 幫助睡眠的 iPhone App 的原理是真的嗎?還心理作用?
※碰到用WinPhone 的人是怎樣一種體驗?
※位元組社是否在 App Store 里下架了?為什麼?
※理論上碟中諜里的 iPhone,iPad 是不是都越獄了?