❶ 為什麼android沒有iOS那麼順滑
雖然很多Android手機的配置都比iPhone要高,比如大多數Andorid手機的內存都有1GB,而iPhone 4S只有512MB內存,但用過iPhone的人都知道Android手機在使用的時候總感覺沒有那麼順滑,究竟為什麼會出現這種現象呢?一位軟體工程師和前Google實習生Andrew Munn解釋說是因為Android系統UI效率低下的框架設計的問題。
不過,這個實習生Andrew Munn是一個軟體工程專業的本科畢業生,他在Android團隊並沒有在框架團隊工作,也沒有看過Android渲染的源代碼,因此他所說的未必是100%准確。並且他也曾經在Windows Phone團隊工作過,因此可能會不自覺的對Android產生偏見。以下就是他對Android為什麼沒有iOS流暢體驗的看法。
Android沒有iOS流暢的原因並非Java GC導致暫停,也不是因為Android運行的是Java編譯的bytecode而iOS運行的native code,根本的原因是,iOS的UI渲染採用實時優先順序,而Android的UI渲染遵循傳統電腦模式的主線程普通優先順序。
這聽起來似乎很抽象和難以理解,但大家可以嘗試一下,使用你的iPad或者iPhone,打開Safari,然後載入一個復雜的網頁,例如新浪網首頁,當網頁載入到一半的時候,把你的手指放在屏幕上,並且四處移動,你會發現所有的渲染立刻停止,在你拿開手指前,網頁永遠也不會繼續載入。
而在Android設備上重復這個操作,你會發現,瀏覽器會繼續嘗試載入頁面並渲染HTML,試圖多任務同時進行,因此對於Android來說,一個高效的雙核處理器是很重要的,這也就是Galaxy S II能夠非常平滑的原因
在iOS中UI渲染過程具有絕對的優先等級,當用戶接觸到iPhone的觸摸屏後,iOS中所有的進程都將停止,UI線程攔截了所有的事件,系統會將所有資源用於渲染UI過程,以保證用戶界面的實時渲染優先順序。而在Android系統中UI渲染過程的優先順序別卻沒有那麼高,也就是說當你觸摸Android手機屏幕的時候,系統後台的程序並沒有停止,仍然在繼續運行之中,比如下載和查收簡訊,這樣系統UI獲得的資源就不夠,這就是Android系統不流暢的原因。
由於這個原因,新發布的Galaxy Nexus,甚至配備四核處理器的話說EeePad Transformer Prime平板電腦都無法保證順滑的操作體驗,這些設備只能與3年前的iPhone順滑程度相比,那麼Android團隊為什麼不從根本解決這個問題呢?
除了UI渲染之外,Android缺乏有效的的硬體加速也是一個原因,在不同的Android手機上的硬體加速存在巨大差異,而蘋果是唯一一個既做硬體又做軟體的手持設備公司,只有蘋果可以在硬體中插入對軟體的優化,使得基於蘋果晶元的設備不僅省電,而且流暢。
實際上,Android的開發工作在第一代iPhone發布之前就已經開始了,原始Android原型體被設計成為使用鍵盤手機的設備,也就是黑莓手機的競爭對手。UI渲染優先順序別在有鍵盤的手機上並沒有那麼重要。但是在iPhone發布之後,Android小組為了快速推出能與iPhone競爭的產品,迅速將Android改成觸摸屏手機系統,但那時重寫UI框架已經不可能了。因為如果這樣Android應用市場中的所有程序將變得不可用,這種關系將一直處於惡性循環之中。
(這個實習生的偽科學真是編的好,在此反駁)
按照那個實習生的說法,android的ui不流暢是因為響應UI處理的優先順序不夠,而google不改進的原因是因為怕影響到已經發布的應用程序?
這人根本不懂ios和android的進程式控制制機制,且不說ios中ui有最高優先順序(笑啊,ios什麼時候UI有最高級了,明明是系統中斷才是最高),竟然說出了android觸摸UI時後台進程保持運行這樣的荒謬的事情,我都懷疑他是不是在google呆過。 即便他說的UI優先順序有理,也不可能出現改變優先順序就會使得程序進入惡性循環這種情況。了解android系統架構應該知道負責圖形處理(關於優先順序部分)的是位於android系統的倒數第二層,也就是內核的上一級,而且android的設計是層與層之前低耦合的,每層對於下一層的依賴僅通過介面來調用,而層內的變化根本不會影響到層外行為。
說簡單一點,就如同你去銀行櫃台辦事,你辦外匯就去外匯窗口,債券就去債券窗口,而銀行內部怎麼處理你的請求是他們的事,你只需要提交你的數據並接收結果即可,銀行內部員工變動也不會影響你的事務辦理。如果真如這個實習生所說,是UI框架處理優先順序的問題,google大可以輕輕鬆鬆直接提高優先順序,絕不會影響到現有任何程序,因為目前沒有任何程序能繞過android的程序框架直接調用到UI下層的方法,因此下層的改進也不會對上層造成兼容性的不適。而且也不增加什麼生產成本。
但為什麼還是感覺android比ios卡?我覺得這是人雲亦雲後的「被變卡」感覺(很多人在概念空白時先入為主的被教唆到android比ios卡,不如ios,而且聽多了這樣的話後自然自己的感覺就不準了),以至於出現了N種關於android為什麼不如ios的「科學、內幕」解釋。我覺得除了辯證還要用發展的眼光來分析這個問題。
在早期,android的優化的確不如ios,這源自於產品的設計理念和年代(android本身是07年才被收購的一個公司,之前這個系統根本沒有得到實際的驗證,而ios始終是在apple下從mac時代起就被打造的)。而硬體也遠沒有iphone強,加上開放免費,什麼魚龍混雜的製造商都加入進來,元器件供應商也是水很深,造成產品水平參差不齊。很多人對android和ios的差距的認識也是從那時才建立的,而看iphone,一年才出一款機器,無論軟體還是硬體,從選擇供應商到製作,有足夠的周期,都是精挑細琢。也就是說,android陣營從低端到高端都有,且低端又多又亂所謂的高端少而不精,而iphone就一個高端,這就如田忌賽馬,老拿人家優秀的比垃圾的,自然而然口碑也就落成了android不如ios的一個大范圍印象。其實這個時代跟ios產品比較,也的確是android的東西不如iphone做得好。
但是近年來android的機器硬體基本上已經超過了iphone但為什麼還是覺得比ios卡?除了上述的心理因素遺留之外,我個人覺得其實這無關android本身,並不是os優化這么簡單的事。而是硬體問題,其實沒有人特別在意這個問題,但是我想說這就如同顯示器的響應時間,響應時間快,在播放時就會流暢沒有拖影。
電容屏也有響應時間,而且對工作環境電壓要求很高,普通的電容板本身響應就比較慢,大概才50~100ms,而且在電壓不穩定時反應更慢,而iphone4的電容板響應時間在10~20ms,差距近80ms說是不到十分之一秒,但是在實際體驗時這就能影響到人們的直覺。另一個因素在於觸屏的玻璃材質,硬度越高越順滑,這是根據阻尼系數和摩擦系數可以測出的。同是鏡面的情況下,硬度越高的材質在摸上去的時候更順滑。iphone用的是大猩猩,硬度達到7,裸身時本身觸感就順滑,沒有拖沓感,再加上大多數買iphone的人貼膜都會比較下本錢(我貼膜花了129),貼膜也會影響到觸感。在普觀android手機,用上大猩猩的寥寥無幾,再肯貼好膜的更是少。在手感上也比iphone要差了。
就我個人長久使用親身體會是,android的UI其實缺少過度動畫,比如在界面切換時的細節(仔細看,ios的界面切換時除了窗口會移動,標題欄和上面的控制項都會以不同的速率在移動,感覺很動感精緻,如同流水般),這樣在操作時造成了突兀感。實際上從觸摸角度來講,我覺得兔子沒有明顯的差異。而且明顯的感覺是,如果iphone有後台程序,或者運行過較多程序之後,哪怕是普通的界面切換也會有卡頓感覺,很明顯的。
最後一點重要的補充就是iOS是偽多線程開發,Android更注重編程模型,iOS更注重用戶體驗。Android將應用內(進程內)渲染(controls)和進程間渲染(surface flinger)放在了不同的模塊、空間,導致動畫時線程切換過於頻繁,需要更高的性能的晶元才能達到和iOS相同的效果;要配合渲染也變得很復雜,所以在橫豎屏切換時沒有像iOS那樣的轉屏動畫。