總說iPhone執行流暢不卡,Android就很卡?
[PConline雜談]買手機時,最常聽到的建議是,有錢就買蘋果吧,用幾年都不會卡。所以即便是蘋果新款手機賣出超出市面上絕大部分手機近一倍的價格,依舊有許多消費者會為之買單。因為他們相信,蘋果的手機能用上更長的時間而且擁有絕佳的體驗。
事實上,的確是如此,儘管安卓旗艦的配置和體驗越來越好,但蘋果似乎還是維持著在手機界的霸主地位。本篇文章就為大家講述iOS為什麼能做到持久不卡而Android卻頻繁卡機。
全面屏手勢——“更流暢的動畫效果”
iOS的設計和體驗一直是有口皆碑的,特別在iPhone X之後的全面屏手勢體驗上,目前來說,還沒有安卓的手機能完完整整做到iOS12上全域性手勢上的跟手度,而系統各處的動畫效果比如開啟控制中心、在多工處理時進行輕掃,或在 app 中滾動瀏覽,這些操作都會更流暢、更靈敏。
Android儘管擁有各種各樣的快捷操作、自定義手勢,全面屏手勢,動畫效果,但整體上的視覺效果並比不上iOS帶給使用者的流暢、完整、跟手。所以第一印象很容易會給消費者帶來Android手機比不上蘋果手機流暢的感覺。而事實上,造成這種現象的原因源於很多底層的原因,下文一一細說。
流程更簡短,優先響應級別
當我們使用iPhone或者是Android的智慧手機時,第一步就是從鎖屏解鎖進入到桌面,然後找到需要使用的APP點選進入。
這是絕大部分人使用手機時候的基礎操作,這個時候iOS系統就表現出來了流暢的一面,但Android產品卻經常給人一種卡頓的現象,特別是後期使用手機時候點開的軟體多了的時候,Android就遠遠不如iOS流暢。這是為什麼呢?
這與兩個系統的響應優先順序有關,iOS對螢幕反應的優先順序是最高的,它的響應順序依次為Touch>Media>Service>Core架構,簡單說當用戶觸控式螢幕幕之後,系統就會最高優先去處理螢幕顯示,也就是觸控(Touch)這個層級,然後才是媒體(Media),服務(Service)以及Core架構。
而Android系統的優先順序響應層級則是 Application>Framework>Library>Kernal架構,和顯示相關的圖形影象處理這一部分屬於Library。也就是說當你觸控式螢幕幕之後,Android系統首先會啟用應用,呼叫框架然後才是螢幕最後是核心架構。
所以iOS能讓人從上手就感受到跟手,流暢, 因為iOS從一開始開發就是為觸控式螢幕幕互動所設計 ,而Android則不同, Android的設計初衷是為了軟體APP而開發 。不過優先順序對系統流暢性是有影響不假,但這並不是最主要的原因,造成兩系統之間流暢性不一的現象還有其它因素,我們可以接著往下看。
硬體加速
如果說從系統底層優先順序響應上,iOS已然做到了為流暢而生,那麼在硬體上,iPhone也與Android手機不同。iOS系統對圖形的各種特效處理基本上都是基於專用的GPU硬體進行加速的,它可以不用完全藉助CPU,而是通過GPU進行渲染以達到更流暢的操控表現。
而Android則不是如此,一方面原因是Android需要適配不同硬體以滿足各種差異配置,一方面Android的設計邏輯並不是為了觸控服務。當然,在Android 4之後的系統版本中,都預設開啟使用GPU硬體進行加速渲染,但依舊無法做到所有特效全部都靠GPU進行加速。
螢幕最先響應的優先順序關係再加上iSO本身GPU加速程式的特性,使得使用者在操控過程中感覺iOS手機擁有著超高的流暢性和舒適度。因為iOS本身的整個設計流程都是在為最大化的流暢做服務,不管是第一印象的滑動觸控式螢幕幕,還是你進一步使用程式時的操作都是如此。最後加上GPU加速這點特性,使得iOS能軟硬體結合,使系統流暢性達到Android手機望塵莫及的高度。
後臺機制——“偽後臺”與“真後臺”
如果說iOS在觸控式螢幕幕上做到軟硬結合已然不錯,但iOS與Andorid在軟體執行時的流暢度不同,則是因為另一個明顯的區別:後臺機制。
iOS是採用偽後臺機制,當用戶按HOME鍵(主頁鍵)退出應用時,iOS其實關閉了該應用,只保留應用的影象入口,並預設將應用的最後執行資料記錄在RAM中,當再次開啟應用時,系統就會把之前保持的最後執行資料還原到應用中,此時應用還原了之前的狀態,給使用者一種應用會在後臺執行的錯覺。
那麼為什麼iOS中被殺死的應用也能收到推送訊息呢?因為使用者從應用中選擇了開啟推送後,iOS系統會增加幾個程序,這幾個程序會從蘋果的伺服器接收資訊,然後再通過該伺服器發給使用者,蘋果伺服器在其中就起到了中轉的作用。正是因為有了這一系列的機制,所以即便iPhone的“表面”配置RAM比安卓手機低,但是iOS還是會給人更加流暢的感覺。
而Android則不同, Android採用的是真後臺機制 ,將應用保留在RAM中,當用戶按主頁鍵返回桌面或者退出程式時,程式實際上並沒有完全退出,而是被系統掛在了後臺。這就是為什麼Android即便關掉了聊天軟體,依然能收到訊息通知,因為它是常駐系統記憶體的,包括平時收到的垃圾廣告推送,也是因為後臺程式在執行。
這機制直接導致從記憶體使用上來看,Android剛開機時記憶體使用很低,正常使用一天,如果不進行清理記憶體操作,記憶體佔用就會越來越高,導致Android系統的流暢度降低,最直觀的感受就是卡慢。所以安卓機器需要更大的RAM,來提升使用者體驗;
開發機制不同
iOS的程式語言是 Objective-C,使用編譯器GCC,而GCC編譯出來的程式碼又被iOS架構優化到了極致,執行過程中不需要虛擬機器在中間插手,執行效率非常高。而且GCC使用記憶體是自己分配和回收的,簡單說就是當GCC要操縱指標,使用完記憶體,當時就釋放了。這導致了ios的記憶體使用率並不是特別高。所以iOS並不需要特別大的記憶體。
Android的程式語言是Java。Java的記憶體管理是通過jvm,jvm是後臺管理記憶體,不需要程式關注記憶體。達到一定的記憶體佔用量會觸發gc,gc會stop the world,把使用者執行緒停止掉。因此可能會影響兩方面,第一在gc的時候卡頓,特別是長gc。長的可能達到幾秒甚至幾分鐘。
第二,Android本身不是為觸控式螢幕打造的,安卓所有的應用都是執行在一個虛擬的環境中,由底層傳輸資料到虛擬機器中,再由虛擬機器傳遞給使用者UI,任何程式都可以輕鬆訪問其他程式檔案。同時gc是後置的,記憶體佔用達到一定程度才回收記憶體,這導致了Android的記憶體使用率很高。當然,谷歌也意識到了這一點,所以在Android 4.0系統版本之後的版本,程式語言和機制已經被Android進行了改善,卡頓現象明顯降低了。
應用開發,封閉式的App Store
App Store是iPhone和iOS一個極為重要的標誌,App Store不僅為蘋果實現了軟體上的盈利,更為iOS中的應用設定了一個標準要求,讓每一個應用程式一年都只適配一種最多兩種CPU,極大的提高了硬體利用效率和軟體開發速度。
而Android則不同,安卓是開源的,開放的,而且安卓是基於Linux核心和多執行緒的開發平臺,開發成本低。此外,Android沒有像iOS一樣的全封閉式App Store,給開發人員相當高的開發自由度,並且還相容各種各樣的硬體,讓軟體從此可以天馬行空不受拘束。
iOS和Android的應用開發各有特點,但也正是這些特點使Android也飽受“流氓”軟體的迫害,使得系統的流暢和整潔度遠遠比不上iOS。當然,Android系統裡也有很多良心軟體,在可見的未來,Android系統對軟體的規範也會越來越強,對“流氓”軟體的查殺也會一再改進。
iPhone越升越卡?Android越用越卡?
其實蘋果手機也不是永遠不卡的,簡單來說,iPhone卡頓有兩個原因:第一種硬體太差,水平跟不上,說的就是已經發布了多年的手機,對比當前效能差太遠,所以使用會有所卡頓;第二種就係統又更新了。升級最新的iOS系統會給手機執行帶來一定的壓力,特別是已經發布多年的iPhone。
Android越用越卡的原因除了是開發機制問題,更多的是APP造成的,主要是因為佔用記憶體、優化不足、流氓軟體影響。既然是APP的問題,最終的解決方法就是儘量下載規範一點的APP,避免一些流氓軟體內建的互相喚醒、自啟、訊息等許可權。
總結
響應級別、硬體加速、後臺機制、開發機制和應用開發等不同的緣故,造成了以前一直到現在iOS比Android系統更為流暢的現象。安卓很多手機在不清理後臺,硬體未更新的情況下,幾乎都會遭遇卡頓的體驗,尤其是開啟軟體載入資源時,在開啟比較大的遊戲時,多應用切換時,或多或少的都會遇到卡頓甚至是重新載入應用的狀況。
但好在硬體配置反超iPhone一大截的今天,Android手機在軟體執行流暢度和美觀上已經擁有著不弱於iOS的體驗,特別是在Android O之後,谷歌也意識到了系統流暢度對體驗的提升,也在逐步的改進系統UI的設計。而國內對於Android深度定製的各家UI,也同時擁有著基於Android的便捷操作和不差於iOS的美觀設計。
未來,在改進了系統設計和擁有了強大硬體後的Android,必定是撼動iOS的霸主地位的唯一騎士。目前,iOS依舊是最為流暢和優秀的手機系統。