安卓9怎麼還是沒有ios順滑
『壹』 安卓怎麼不如ios運行流暢
一、優先順序別不同:iOS最先響應屏幕
當我們使用iOS或者是Android手機時,第一步就是滑屏解鎖找到相應程序點擊進入。而這個時候往往是所有操控開始的第一步驟,iOS系統產品就表現出來了流暢的一面,但Android產品卻給人一種卡頓的現象,更別說後續深入玩游戲或者進行其它操控了。這是為什麼?
其實這與兩個系統的優先順序有關,iOS對屏幕反應的優先順序是最高的,它的響應順序依次為Touch--Media--Service--Core架構,換句話說當用戶只要觸摸接觸了屏幕之後,系統就會最優先去處理屏幕顯示也就是Touch這個層級,然後才是媒體(Media),服務(Service)以及Core架構。而Android系統的優先順序響應層級則是Application--Framework--Library--Kernal架構,和顯示相關的圖形圖像處理這一部分屬於Library,你可以看到到第三位才是它,當你觸摸屏幕之後Android系統首先會激活應用,框架然後才是屏幕最後是核心架構。
優先順序的不同導致了iOS產品以及Android手機在操控過程中的表現差異,當你滑動屏幕進行操控的時候,iOS系統會優先處理Touch層級,而Android系統則是第三個才響應Library層級,這是造成它們流暢度不同的因素之一。
二、硬體工作配置不同:iOS基於GPU加速
目前智能手機硬體裝備競賽當中,其實處理器等配置已經達到了一個瓶頸期,各大旗艦產品在硬體比拼當中基本上沒有太大的區別,而這時候GPU就成為了一個凸顯差異的重要因素。一些大型軟體像是3D游戲對GPU性能要求都會比較高,蘋果iPhone產品採用的Power VR SGX系列GPU在當下來說非常的主流,跑分測試數據證明了它並不會比一些旗艦級別的Android產品差勁。
而iOS系統對圖形的各種特效處理基本上正好都是基於GPU硬體進行加速的,它可以不用完全藉助CPU或者程序本身,而是通過GPU進行渲染以達到更流暢的操控表現。但是Android系統產品則並非如此,因為Android需要適應不同的手機硬體,需要滿足各種差異配置,所以很多圖形特效大多都要靠程序本身進行加速和渲染,並嚴重依賴CPU運算的操作自然會加大處理器的負荷,從而出現卡頓的問題。雖然Android 4.0以及4.1等更高版本中進行了改進將硬體加速設為默認開啟,但依舊無法做到所有特效全部都靠GPU進行加速。在很多Android手機裡面都自帶有「是否開啟GPU渲染」這個功能選項,不過開啟之後的改善也是微乎其微。
屏幕最先響應的優先順序關系,再加上iSO本身GPU加速程序的特性,使得大家在操控過程中感覺iOS手機擁有著不錯的流暢性。因為它本身的整個流程都是在為最大化的流暢做服務,不管是第一印象的滑動接觸屏幕,還是你進一步使用程序之後的更深層操作都是如此。而GPU加速這點特性,應該是它優於Android系統流暢性的又一個因素。
三、開發機制不同:安卓機制效率低
Android的編程語言是JAVA,而iOS的則為Objective-C,不過要是說Android系統之所以有些卡頓是因為JAVA開發語言的關系,或者是拿它和Objective-C對比肯定會有人提出質疑。Objective-C的優勢是效率高但比較「唯一」,而JAVA的優勢則是跨平台不過運行效率相對偏低,其實這兩個編程語言所帶來的機制不同,就已經造成了各自系統之間的流暢性差異化。
iOS的Objective-C,編譯器gcc,而這個gcc編譯出來的代碼又被蘋果專為iOS架構優化到了極致,運行過程中也不需要虛擬機在中間插手,執行效率自然很高。這一段話應該是iOS系統本身運行程序的執行過程,而Android是通過JAVA虛擬機來執行,並且系統需要佔用大量內存來換取執行速度,再加上不定期的內存自動回收機制,從而直接導致了卡頓現象的出現。
Android的JAVA編程本身運行效率比Objective-C低一些,而且再加上內存自動回收的機制,所以造成了一些卡頓不流暢的現象出現。但根據技術人員講解,現代的JAVA虛擬機效率已經不再是最大的瓶頸,Android 4.0系統版本之後的卡頓現象明顯得到了改善,所以這也是有用戶並沒有發現自己新買的Android手機出現太多卡頓現象的原因。看來編程語言和機制已經被Android進行了改善,這同樣也不是造成它與iOS流暢性偏差的唯一因素,不過影響卻是實實在在存在著。
三、系統設計不同:安卓APP無法統一
因為iOS產品的封閉性,所以所有的APP運行對象都比較單一,因為每個應用程序都是被運行在iPhone,iPad等iOS產品當中,它們有著很高的硬體利用效率。因為iOS系統的配件供應商只有那麼幾家,CPU也是一年換一次,這點不像Android終端年年變月月變,開發者很難遇見未來終端解析度會包含多少種,GPU驅動會包含哪些等等,所以相對來說Android應用開發成本較高且收益較慢。而iOS應用開發則因為軟硬體垂直整合而受益,這樣一來蘋果自然就保證了應用本身其與硬體產品之間的完美結合程度。
其實Android和iOS兩大系統APP開發情況的不同,也正是它們開發和不開放的特性所造成的。如果要是拿旗艦Android手機加上一個專為這款旗艦產品設計的游戲,來和蘋果iPhone運行對比的話,你真的不會遇到Android旗艦機出現卡頓延遲的問題,為什麼因為這款游戲針對這款手機設計,在軟硬等方面都達到了最大化的兼容和優化,自然就不會出現停滯的現象。
而Android系統程序要被安裝在各種符合要求的手機上面,開發者也不可能針對所有的機器型號進行開發,只能在比較主流的機器上進行測試並保證運行效果,所以他們為了兼顧整個產品線只能不得不降低游戲體驗以達到高中低產品可以共用的效果。最後那些占據了Android終端份額的大量大眾用戶們由於自己的手機不是旗艦產品而得不到流暢的使用體驗,自然而然就會產生Android產品不如iOS流暢的抱怨。
不管是iOS產品感覺比Android流暢還是真的比它流暢,其實說到底原因很簡單。蘋果會花費一年甚至兩年的時間去開發一個桌面icon,一種字體,並去測試屏幕點位,而Android終端中除了Nexus系列之外似乎沒有太多產品可以做到用這么長的時間去做這么細致的事情。有網友說得好,Android做的更多的是「讓系統跑起來」,而iOS擁有著蘋果做的更多的則是「讓系統以最高的效率跑起來」,或許這就是iOS產品比Android更流暢的原因吧。但更好的一面的是,隨著谷歌對Android的持續升級以及各廠商對自家產品的循序改進,使得越來越多的Android終端正在擺脫卡頓不流暢的束縛,未來安卓用戶的期待同樣有望得到更好的滿足。
『貳』 為什麼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那樣的轉屏動畫。
『叄』 iOS側滑沒安卓好用事實真的是這樣嗎
iOS側滑在使用的過程中確實不如安卓,其實策劃就是返回鍵,在使用手機的過程中,側面滑動能夠返回到桌面,使用起來也是非常方便快捷的,無論打開了任何軟體,都可以選擇從側面滑動能夠返回到前面的界面。蘋果的側滑在有些軟體當中是不支持的,如果手速操作過快的話,有可能會出現不響應的情況。但是如果是安卓的話就不會出現這樣的現象,而且大部分安卓旗艦機在反應方面也都非常的靈敏。安卓和iOS都有著各自的優點和缺點,可以根據自己的需求選擇適合自己的手機。
蘋果手機在設計結構上和安卓有著很大的差別,而且蘋果軟體在使用的過程中,操作也是跟安卓有一些區別的。大部分的用戶都比較喜歡簡約美觀的手機,所以在更新的過程中,很多手機也都取消了home鍵,返回鍵的存在也有所降低。雖然在使用的過程中會有一些影響,但是整體的體驗感還是比較不錯的。
『肆』 華為安卓的系統比iphone的ios系統方便在哪裡
大家都知道,蘋果手機使用的是ios系統,華為手機使用的是安卓系統,在大家的印象中,ios系統要比安卓系統流暢,而且安卓系統使用時間長了就會卡。這些都是以前的事了,自從安卓7.0以後,安卓系統的這種卡頓現象就開始好轉,在流暢性上也可以媲美ios系統。
我的iphone 6s在2019年上半年時,玩個王者就已經開始卡了,iphone 6s是2015年9月發布的,到2019年正好快4年了,現在放在家裡躺著,當備用機。我同事的華為mate9,現在玩王者時還是很流暢,沒有卡頓現象,mate9是2016年11月發布的,到現在也快4年了。這時,可能大家就會有疑問了,為什麼iphone 6s到4年就卡,而華為mate9到4年也不卡呢?難道華為mate9比iphone 6s要好這么多?
其實,並不是mate9比iphone 6s優秀多少,而是由多種因素讓mate9挺過4年不卡,主要體現在以下2個方面。
一、如果系統不升級,華為和蘋果都可以做到4年不卡。
我同事的華為mate9現在的手機系統是emui8.2.175,mate9出廠時的系統是emui5.0,也就是說,我同事的mate9隻升級了一次大版本(emui系統沒有出emui6.0和emui7.0,這是為了對應上安卓的版本號,emui5.0對應的是安卓7.0,emui8.0對應的是安卓8.0)。而我的iphone 6s,一有新系統,我就會升級,到2019年已經升級到ios 12.3.1。大家都知道,新系統都是為新手機新硬體量身定製的,對於那些比較老的手機(3年以上),如果升級到新系統,手機的硬體可能跟不上,這時,就可能會出現卡頓現象。所以,建議3年以上的老手機,不要升級到最新的系統。
二、養成良好的習慣,手機4年不卡不是夢。
不管是蘋果手機,還是安卓手機,使用一段時間後,手機里會安裝很多APP軟體,系統會變得非常臃腫,系統里會留下很多的垃圾,如果我們沒有良好的使用習慣,時間一長,都有可能出現卡頓。所以,對於那些不使用的APP軟體,我們要果斷卸載;對於系統的垃圾,我們要定時清理。比如:微信、頭條、瀏覽器、網路視頻等等軟體,使用時會佔用大量的系統緩存,使用後,我們最好能做到定時清理它們,如果長時間不清理,就有可能占滿手機的存儲內存(ROM),這時,手機就會出現卡頓。
可見,不管是ios系統的蘋果手機,還是安卓系統的華為手機,只要我們不經常升級手機系統,有良好的使用手機習慣,手機4年不卡並不是夢。當然,現在的手機更新換代非常快,功能也是一年一個樣,很多人都會選擇兩年一換,甚至一年一換,所以,「4年不卡」已經不再是主流,只是少部分手機用戶的追求了。
『伍』 為什麼感覺MIUI9比iOS流暢
安卓系統應用廣泛,只會越做越好,遲早會超過蘋果的。
『陸』 安卓為什麼比不上ios
這倒也不一定。
ios僅僅限於蘋果公司的產品,所以系統比較純凈,不像安卓有各種手機公司開發的次生系統,比如小米MIUI等等;再次基礎上,ios系統對軟體安裝是有要求的,只能在蘋果的軟體商店下載,這也就保障了系統的純潔與安全。所以ios的流暢性和安全性比較好。
相比之下,安卓的開放性比較好,所以可玩性比較強,可以隨心所欲地打開如何鏈接,安裝任何應用。而部分軟體在ios中必需越獄。這也導致了安卓的安全性較差,系統漏洞多。
現在使用安卓的廠商特別多,所以安卓系統的升級更新就很成問題。現在安卓系統已經開發出8.0,但是大部分安卓手機還停留在6.0以下版本。安卓的流暢性也就一直難以提升,導致安卓手機流暢性會隨著使用而變差。而ios系統的流暢性就可以長時間保持,而且系統更新比較及時。
但是現在谷歌公司和各大手機廠商都在努力改進。去年的華為mate9就成功的解決了安卓的系統流暢性問題,使得系統流暢性可以得到較好保持,今年的mate10應該也不會比iPhone遜色。
所以安卓和ios主要差在流暢性,安全性,可玩性上。現在安卓的流暢性也不比ios差太多了。
『柒』 安卓已經比ios流暢了嗎
直到現在,Android 也是不如 ios 流暢。
ios 比 Android 流暢的原因:
1、優先順序別不同:
iOS對屏幕反應的優先順序是最高的,它的響應順序依次為Touch--Media--Service--Core架構,換句話說當用戶只要觸摸接觸了屏幕之後,系統就會最優先去處理屏幕顯示(Touch這個層級);
而安卓是真後台,即使你退出軟體,軟體也會在後台自啟,繼續佔用你的RAM,而RAM是有限的,當RAM剩餘太少的時候你就會感覺到卡頓。同時,後台的程序運行也會佔用CPU資源,使手機處理能力下降,這也是安卓手機需要通過使用更高的配置來提高流暢度的原因。
4、線程不同:
蘋果的單線程比安卓機強,大部分安卓機都是堆核,而蘋果是堆料,安卓是小核高頻,蘋果是大核低頻,在一個核上堆20多億晶體管,堪稱堆料狂魔,自然單線程神速,上面也說了,蘋果在運行一個應用時,另一個是暫停的,所以神一般的單線程加上大部分情況下只運行一個,當然神速。
『捌』 安卓的手機,華為的,以前用著用著系統就變順滑了,像ios那樣的頁面視覺順滑,我這恢復出廠設置了,這
你開啟那個窗口動畫就有了
『玖』 iOS,安卓設備的觸屏比蘋果順滑嗎
Andorid更新了一個版本又一個版本,硬體從單核到雙核到四核,系統流暢度總算基本能和iOS持平了。不過人們不禁會問,為什麼都是基於Linux, 兩個系統會差別如此大?為什麼iPhone 4用單核處理器就能實現的流暢度,Android要高端雙核才能保證?近日,Android開發小組工程師Dianne Hackborn算是半官方回答了其中的一個緣由。
Dianne Hackborn表示,從界面UI本身的渲染而言,首先,Android從第一個版本就有使用圖形硬體加速,例如通知欄拖拉,對話框的顯示和切換等等。只 不過在3.0之前的版本都不是採用完整的圖形硬體加速。由於Android不是一個統一平台,各終端存在硬體差異,系統會自動調節動畫的幀數。一個典型的 例子就是,Nexus S可以實現到60fps的渲染,所以會足夠流暢。但使用同樣解析度的里程碑,由於硬體(GPU)性能問題,它就無法提供足夠的幀數來保證流暢了。這樣,它 的界面渲染幀數要低於60幀,我們使用起來就會偶爾感覺到「卡」。
而且,即使為UI開啟硬體加速,OpenGL技術帶來的內存開銷會十分大,比如PowerVR的圖形晶元,此時要消耗掉8MB內存,而UI
1/10
程序本身都只要 2MB內存,這太劃不來了。所以,為了保證不同機型順利運作,很多時候Android會採用CPU繪圖運算代替硬體加速——注意,CPU還要干別的事情, 讓CPU來繪圖只會拖慢速度。 在Android 4.0之前的版本,硬體加速是作為一個可選擇的參數而存在(考慮到部分APP不支持)。但從4.0開始,這個選項將會被默認啟用,開發小組已針對進行優化,即使不支持硬體加速程序運行也不會出現問題。
Dianne Hackborn最後表示,硬體加速不是提升流暢度的唯一手段。事實上Android開發小組已經使用很多技術例如改進渲染技術來提升流暢度,典型的例子 就是Android 3.0的瀏覽器相比2.2有巨大進步。而隨著4.0鋪開,更多用戶可以感受到這點。
Dianne Hackborn沒有評價iOS是如何達到流暢的。不過大家注意,從iPhone 3GS開始,每一代iPhone的圖形晶元(GPU)都相當強大(iPhone 3GS、iPhone 4、iPhone 4S的圖形處理晶元均為同代手機最高水平),而且蘋果iOS是封閉系統,我們猜測,蘋果在這一方面並沒有碰到Android那麼多煩心事兒。
蘋果A5處理器集成的PowerVR SGX543MP2圖形處理器性能相當強大,幾乎秒殺了Android陣營各類對手
而另一位軟體工程師和前Google實習生Andrew Munn解釋說是因為Android系統UI的框架設計的問題。
在iOS中UI渲染過程具有絕對的優先等級,當用戶接觸到iPhone的觸摸屏後,iOS中所有的進程都將停止,系統會將所有資源用於渲染
2/10
UI過程。而在 Android系統中UI渲染過程的優先順序別卻沒有那麼高,也就是說當你觸摸Android手機屏幕的時候,系統後台的程序並沒有停止,仍然在繼續運行之 中,比如下載和查收簡訊,這樣系統UI獲得的資源就不夠,這就是Android系統不流暢的原因。
由於這個原因,新發布的Galaxy Nexus,甚至配備四核處理器的話說EeePad Transformer Prime平板電腦都無法保證順滑的操作體驗,這些設備只能與3年前的iPhone順滑程度相比,那麼Android團隊為什麼不從根本解決這個問題呢?
實際上,Android的開發工作在第一代iPhone發布之前就已經開始了,原始Android原型體被設計成為使用鍵盤手機的設備,也就是黑莓手機的 競爭對手。UI渲染優先順序別在有鍵盤的手機上並沒有那麼重要。但是在iPhone發布之後,Android小組為了快速推出能與iPhone競爭的產品, 迅速將Android改成觸摸屏手機系統,但那時重寫UI框架已經不可能了。因為如果這樣Android應用市場中的所有程序將變得不可用,這種關系將一 直處於惡性循環之中。難怪喬布斯在傳記中表示Android是偷來的產品,哪怕蘋果傾家盪產也要將其消滅。 自蘋果收購了喬布斯的NeXT之後,花了六年把它打磨成了Mac OS X;又在2005年左右花了兩年半時間,基於它製造了iOS。從各種意義上來說,iOS是一個傳統技術的操作系統。它有一個基於微內核Mach的 Darwin內核,有一個叫做Cocoa Touch的運行時,用的是Objective-C這個C語言的超集。而Android在Linux內核之上,集成了一個Java虛擬機Dalvik,整 個應用層跑在虛擬機之上,而開發語
3/10
言用的是Java。
事實上雙方的選擇都是很有道理的。蘋果有Mac OS X十年基礎,當然會選擇自己最精通的技術,把iOS打造成一個傳統系統,也可以無縫鏈接Mac OS X的開發者資源。而谷歌沒有任何操作系統經驗,為了要爭取最大的開發者資源,他們選擇了世界上最大的Java社區。雖然起點相同,但走出的第一步方向就已 經截然相反。
究其根底,只在於Java只有自動內存回收,而Objective-C自動與手動內存回收均可(注意iOS只有手動內存回收)。這小小的區別導致,谷歌只 能做一個Java虛擬機,而蘋果可以繼續他們在Mac OS X上的經驗。而這個行為導致了兩者在系統流暢性上的最大區別。Java由於只有自動內存回收,系統會在任意時間停掉所有進程開始回收內存,這個過程是人類 可以感受到的數百毫秒。而iOS由於可以手動管理內存,可以在用戶操作的間歇由程序員進行回收,用戶不會在頻繁使用過程中感受到停頓。在日常使用中這個停 頓其實是可以忍的,但是在游戲過程中這個停頓是不可以忍的,比如想像一下一隻憤怒的小鳥在空中停頓了零點幾秒再繼續飛行。
谷歌事實上意識到了這個問題,於是它在Android 2.3版本中大修了這個問題並將之作為一個特性大書特書。且拋開2.3的普及性不談,單說這個大修的行為,也並沒有修好這個問題。於是谷歌拋出了第二個在 開發上的修補:引入C/C++ NDK。可以說到了這一步, Android整個內核往上的應用層才有了與iOS抗衡的實力,可惜時間已經過去了近四年,iOS積累了十五年,Android剛剛起步。
4/10
而在內核之下呢?基於微內核Mach的Darwin 對比 當今伺服器主流Linux又如何?當年Linux創始人曾經與某位牛人吵過一場著名的架,正是關於微內核與內核對比,Linus一直到現在都認為微內核只 是紙上談兵而在現實中解決不了實際問題。在這場吵架之後的歲月,堅持內核的主流系統只剩下Linux一家,而微內核系統已經延展到了基於SVR4的IBM AIX/HP-UX,GNU/Hurd,Mac OS X,Blackberry QNX,Windows(是的,你沒有看錯)。Time will tell,這句話從來都沒有錯。Android三方ROM所困擾的驅動問題,正是Linux內核的最大局限,植根於骨子的病是治不好的。
下面是第三位谷歌內部工程師的關於Android圖形系統的一些觀點。
1. Android 一直在使用硬體加速。實際上從1.0版本之後,所有的窗口元素的合成與顯示都是通過硬體完成的。
2.這意味著許多你所看見的動畫都是被加速過的:按鈕的顯示、通知欄下拉的陰影、不同Activity之間的切換動畫、彈出窗口以及提示框的顯示和隱藏等等等等。
3.Android以前使用軟體方式(與硬體加速相對應)來控制各個窗口元素的渲染,例如下圖的UI,其中包括四個窗口組件:狀態條、壁紙、桌面上的的啟 動器、以及菜單。如果其中一個元素更改了自身的內容,例如高亮一個菜單條目,對於3.0之前的版本,系統使用軟體方式來繪制新的內容,然而並非所有的元素 都需要被重新繪制,同時各個窗口元素的拼接也是通過硬體方式完成的。類似的,任何窗口的移動:例如菜單的上下運動是完全通過硬體方式渲染的。4. 現在我們來關注窗口元素的內部渲染,實際上為了達到每秒60幀的FPS,你並不一定需要硬體加速。幀速取決於要顯示的像素的數量以及CPU的速度。比如 說,二兒子完全可以以60FPS的速度在它800*480解析度的屏幕上完成任何普通的原生UI動畫,例如列表的滾動等,完全沒有問題。而最初的 Droid系列卻很難達到這樣的速度。
5.在Android3.0中可以實現窗口的」完全」的硬體加速繪制。而在Android 4.0中也沒有引入更多的功能。 從3.0開始,如果在你的應用中設置了一個標志允許硬體加速,那麼此時所有的窗口的繪制都會交給GPU來完成。在Android 4.0中最主要的改變就是:在面向Android4.0或更高版本的應用中,硬體加速是被默認開啟的,再也不需要在配置文件中設置 android:handwareAccelerated=」true」.(而我們不允許之前的應用默認打開硬體加速,是因為光靠硬體加速,無法很好的完 成某些特殊的繪制操作;同時在應用需要其中一部分UI更新的時候,會影響其的一些表現。對於目前現有的很多應用,強制開啟硬體加速,會明顯的中斷應用的運 行)
6.硬體加速並不如大家所認為的那樣完美。例如在基於PVR驅動的設備上(比如二兒子跟三兒子),光是在進程中開啟OpenGL就得佔用8M的RAM。對 比一般進程的2M的開銷實在是巨大。RAM是有限的,一大部分被拿去繪制,那麼其他正在運行的進程就會因為缺少內存而出問題,比如降低應用間切換的速度。
7.由於OpenGL的額外開銷,我們最好不要過多的使用其進行繪制。比如我們現在在做的一些工作,就是為了讓Android 4.0能在不使用
6/10
硬體加速的情況下流暢的在二兒子上使用:這樣我們就不需要在系統進程中浪費8MB的內存用,也不需要在手機進程中浪費額外的8M內存,或 者是在系統UI進程中的8MB內存 等等等等。相信我,你不會注意到用OpenGL來繪制一些類似狀態欄或是華麗的動畫是完全沒有好處的。
8.硬體加速並非流暢UI的「解葯」。我們為了UI的流暢嘗試了很多不同的方法,比如說在1.6中引入的對前台/後台進程的調度策略,在
2.3中的對輸入 系統的重寫,」嚴厲模式」的使用,並發的垃圾回收機制,載入器等等。如果你想達到60fps的幀速,你只有20毫秒的時間來處理每幀的內容。這時間實在不 長,光是在UI進程中讀取存儲卡的操作產生的延時就會大於這個時限,尤其是在寫操作的時候。
9.舉些最近發現的一些影響UI流暢度的例子:我們注意到在二兒子上,使用4.0時列表的滾動就不如使用2.3時流暢。而導致這個現象的原因則是計時器的 輕微漂移:有些時候應用正在接收觸摸事件並在屏幕上繪制,而在上一個動作還沒完成的的時候,就接受到下一個事件並開始繪制,導致它丟失了當前這幀。盡管發 生這種現象的時候,幀速能達到穩定的60FPS.(當然,這個問題已經修正)
10.當人們比較Android跟IOS上瀏覽器的滾動流暢度的時候,他們所看見的差別並非開沒開啟硬體加速所導致。 最初的時候,Android使用了一種完全不同的渲染策略,並做了一些折中:網頁被轉換成一個」顯示列表「,持續的在屏幕上進行繪制,而非使用塊 (Tiles)的形式。它有一個優點:就是在滾動或是縮放的時候不會發生有的塊還沒被渲
7/10
染出來的現象(譯者註:早期的IOS上這種現象非常明顯,快速滾動 到底部時要等一會網頁才會一塊一塊的繪制出來)。 而這個方法的不給力之處就在於頁面復雜的時候,幀速就明顯低了。例如Android3.0,瀏覽器中現在開始使用塊的方式進行渲染,於是它可以在滾動或是 放大的時候保持一個穩定的幀速,自然也會出現新的塊沒有被立即渲染出來的情況。 而每個塊都是以軟體方式繪制的,我相信在IOS中也是這樣的。(在3.0之前的版本中,沒有開啟硬體加速,基於塊的策略也可以使用。而且如我之前提到的, 二兒子可以很容易的達到60FPS)
11.硬體加速不能如大家所想奇跡般的讓繪制的問題統統消失。GPU的性能就是一個很重要的限制。最近一個很有趣的例子:基於英偉達的Tegra2的平板 可以很容易的以60FPS的速度訪問2.5次1280*800解析度的屏幕中的任何一個像素。現在考慮到在Android 3.0中切換到所有應用列表的情形:你需要繪制背景(1x 所有的像素)、接著是快捷方式和桌面小工具(假設內容不多,花費0.5x),接著是所有應用的黑色背景(1x),接著是所有應用的ICON(0.5x)。 顯然,我們已經超過了原先的預算了,而此時我們還沒完成各個獨立窗口元素的拼接並做最後的顯示。想要取得60FPS的動畫,Android 3.0以及後續版本使用了一系列的小技巧。 其中主要的一個就是: 它將所有的窗口元素平鋪在一個層中,而不是挨個拷貝到CPU的緩存中。但即使是這樣,我們已然超出預算,幸好我們使用另一個技巧:因為Android中的 背景是一個獨立的窗口元素,我們可以將它設置的比屏幕更大
8/10
來放置整幅點陣圖,現在,用戶開始滑動,背景跟著運動,此時並不需要任何特殊的繪制,僅僅是移動窗 口即可,而由於這個窗口是在一個平鋪層上,我們甚至不需要用GPU來將這個窗口元素組織到屏幕中輸出。
12.隨著屏幕解析度的不斷升高,能否達到60FPS跟GPU的速度尤其是內存匯流排帶寬息息相關。事實上,如果你想要提升硬體的效力,特別注意要提升內存匯流排的帶寬。很多時候CPU(特別是帶有完美的NEON指令集的CPU)會比內存匯流排塊的多。
有些人認為蓋世兔已經有了一個非常流暢的UI並指出他們已經超越三兒子並做了很多改進。事實上,大家忽略了很多設備的差異,蓋世兔的屏幕是480*800 而三兒子是720*1280。如果二兒子在它480*800的屏幕上都能達到60FPS,擁有更NB的CPU的蓋世兔必須得同樣流暢嘛。 而兩者之間最大的差別就是三兒子需要同時繪制2.4倍於蓋世兔的像素。這相當於在單核上提升到2.4倍的速度。(需要指出 在UI渲染的時候,多核是沒有意義的,因為渲染必須要在一個進程中完成,無法並行)
這就是為什麼硬體加速非常重要:隨著像素的提升,GPU通常能更好的處理圖像的運算。事實上,這是我們在Android中引入硬體加速的最大動力。在 720*1280的屏幕上,現有的ARM CPU達到60FPS很吃力,但是通過GPU渲染就不同了。同樣,在與蓋世兔的比較中,同時打開沒有硬體加速的應用,在三兒子中無法達到蓋世兔同樣的 60FPS,是因為它得渲染2.4倍於蓋世兔的像素。
9/10
在最後,還得提及GPU的另外一個優勢:許多繪制的效果變得更加容易。比如你要以軟體形式繪制一個點陣圖,你除了設置一個位移,不能做任何事。僅僅是縮小就 得花上相當多的時間進行渲染。而在GPU中,此類轉換則相當容易。這就是為神馬新的默認主題Holo使用硬體加速繪制背景。而在沒有開啟硬體加速的應用 中,此類背景會自動去掉~