為什麼安卓機沒有iPhone流暢?
【原文:http://tech.qq.com/a/20150226/009105.htm】
[摘要]Android沒有iOS流暢的根本的原因是,iOS的UI渲染採用實時優先順序,而Android的UI渲染遵循傳統電腦模式的主執行緒普通優先順序。
網友“foto茄”:
為什麼iPhone 6記憶體僅有1GB,而很多安卓機配置相當高了,還是覺得iPhone流暢一些?
騰訊科技:
相信很多網友都有類似疑問,感覺安卓手機在流暢度上不如iPhone手機。先不說一些配置低的安卓機,即便是最新版安卓系統的旗艦手機,也會感覺達不到iPhone手機的那種流暢度,因此有人以此判斷安卓手機不好。
其實,這都是二者系統機制不同導致的差異。
渲染機制不同
Android沒有iOS流暢的根本的原因是,iOS的UI渲染採用實時優先順序,而Android的UI渲染遵循傳統電腦模式的主執行緒普通優先順序。
通俗點說就是iOS對螢幕反應的優先順序最高,使用者只要觸控螢幕,系統就會最優先處理螢幕顯示這個層級,馬上給出動畫效果,然後才處理媒體、服務、核心的架構。
而安卓則是追求程式優先,觸控螢幕後的手機螢幕顯示和動畫效果放在比較後的優先順序。同樣開啟相同的網頁,Android手機就會直接將整個網頁全部載入同時渲染HTML,這無疑就增加了處理器的壓力。因此對於Android來說,一個高效的雙核處理器是很重要的。
在iOS中UI渲染過程具有絕對的優先等級,當使用者接觸到iPhone的觸控式螢幕後,iOS中所有的程式都將停止,UI執行緒攔截了所有的事件,系統會將所有資源用於渲染UI過程,以保證使用者介面的實時渲染優先順序。
而在Android系統中UI渲染過程的優先順序別卻沒有那麼高,也就是說當你觸控Android手機螢幕的時候,系統後臺的程式並沒有停止,仍然在繼續執行之中,比如下載和查收簡訊,這樣系統UI獲得的資源就不夠,這就是Android系統不流暢的原因。
後臺機制不同
安卓手機的後臺是真後臺,像PC一樣,將應用保留在RAM中,當使用HOME鍵退出應用時,程式實際上並沒有完全退出,而是被系統掛在了後臺,為何我們關掉了聊天軟體依然能夠收到訊息通知,因為它常駐系統記憶體。包括平時收到的一些垃圾廣告推送,也是因為後臺有程式執行。
所以這就導致了一個現象,從記憶體使用上來看,安卓剛開機時記憶體使用很低,若不進行清理記憶體操作,正常使用一天,記憶體佔用會達到75%以上。而記憶體佔用越高,使用起來流暢度就會越低,所以安卓機器需要更大的RAM來提升使用者體驗。
而iOS呢,其實是採用的偽後臺,當使用者HOME鍵退出應用時,iOS其實關閉了程式,只保留應用的影象入口,只會預設將應用的最後的執行資料記錄在RAM中。
之所以iOS也能收到推送,是因為當使用者從應用中選擇開啟推送之後,系統會增加一些程式,這些程式會從蘋果伺服器接收資訊,然後再通過伺服器發給使用者,蘋果伺服器在這裡是起到了中轉的作用。而正是因為有了這一系列的機制,所以即便iPhone的配置相比於同類安卓機低了很多,但是iOS還是會給人更加流暢的感覺。
iPhone執行程式的效率比安卓機高
另外,安卓系統的程式語言是Java,特點是通用性強,效率低。而iOS的則為Objective-C,專一性強,效率高。
iOS系統本身優化得很好,而且程式也是直接執行,所以效率很高。而安卓系統是通過Java虛擬機器來執行,系統需要佔用大量記憶體來換取執行速度,也就是要繞了個大圈才執行程式,所以效率低很多。
廠商喜歡給iPhone做優化
由於iOS的封閉性,App Store裡面的App都是在iPhone等產品上執行,硬體利用效率非常高,而且解析度大小,硬體的更新等等引數也比較穩定,優化工作也容易進行,因而iPhone上的App和硬體結合程度比安卓高很多。
安卓手機的硬體配置一樣天天變,開發者也不可能針對所有的機器型號進行開發,只能在比較主流的機器上進行測試並保證執行流暢,所以很多國產中低端安卓手機很難得到流暢的使用體驗。
相關文章
- 最流暢的遠端桌面,有沒有最流暢的遠端桌面推薦,具體怎麼使用?
- 為什麼Hook沒有ErrorBoundary?HookErrorORB
- 為什麼Google沒有客服?Go
- Twitter為什麼沒有當機?
- 為什麼日本德國沒有一流網際網路企業?
- MySQL Connectors為什麼沒有javaMySqlJava
- 為什麼Lisp沒有流行起來Lisp
- 為什麼說iPhone迴歸小屏沒有意義?iPhone
- 為什麼?為什麼?Java處理排序後的陣列比沒有排序的快?想過沒有?Java排序陣列
- OptionalInt為什麼沒有ofNullable()方法Null
- Ubuntu 安裝後為什麼沒有中文?Ubuntu
- 抖音 apk 為什麼沒有 launchable-activityAPK
- 為什麼Android沒有iOS那麼順滑AndroidiOS
- 為什麼react-redux沒有更新hooks APIReactReduxHookAPI
- 為什麼前端不能沒有監控系統?前端
- 為什麼C++ 並沒有"王者歸來"?C++
- 為什麼沒有好用的Android遊戲引擎?Android遊戲引擎
- 為什麼中國人沒有自己的程式語言?
- 為什麼乙女遊戲在美國沒有市場?遊戲
- 為什麼抄FGO的都沒有好下場?Go
- 【開發總結】order by 為什麼沒有走索引?索引
- 每天都在學習 生活為什麼沒有任何改善
- 智慧手錶為什麼沒有受到真正的追捧?
- 為什麼Python中沒有Switch/Case語句?Python
- 為什麼我們說區塊鏈沒有那麼容易?區塊鏈
- python有pypi.org,為什麼golang沒有gopi.orgPythonGolang
- 當iphone也可以快充以後,安卓機拿什麼競爭市場iPhone安卓
- 為什麼 Go 語言沒有三元運算子Go
- Django官方為什麼沒有標準專案結構Django
- 前端ui框架為什麼沒有一枝獨秀前端UI框架
- 為什麼雙PC沒有提高我的工作效率
- [python]為什麼父類的值沒有改變Python
- 為什麼iPhone拍照更好看iPhone
- 分析競價推廣為什麼有訪問沒有諮詢KMK
- 為什麼沒有基礎學不好python程式設計?Python程式設計
- 【譯】為什麼Rust中的BTreeMap沒有with_capacity()方法?Rust
- 為什麼我說OKR與KPI沒有本質區別?OKRKPI
- 為什麼MySQL沒有負載,但交易卻跑不動?MySql負載