什麼原因可能會造成Android手機卡頓?

分析:此問題更多的是從宏觀角度考覈面試者對Android系統瞭解,“卡頓”是站在用戶角度的描述,對於開發人員應從,Android的發展歷史、程序的運行機制、程序性能優化等諸多方面進行延伸回答。技術層面應對性能優化做爲回答重點,突出專業知識。

目錄

前言

碎片化後的系統因素

內存回收機制

硬件性能與軟件不匹配

應用優化自身不利,導致的卡頓

運行時所需要的資源存在強烈競爭

總結


前言

Android是基於Linux的開放源代碼的操作系統,一般用於移動設備,自2008年第一部Android手機發布以來,到如今已有十多年的發展歷程,從最初的測試版本,到最新的Android 10.0,甚至計劃在2020年3月份開放的開發版。經歷了近20個發行版本後,被用戶所吐槽最多的卡頓問題爲什麼還一直得不到解決呢?我認爲有以下原因。

碎片化後的系統因素

所謂碎片化,簡單的理解就是:Android整個平臺上的差異越來越大。越來越大的原因有以下因素:

  1. Android在市面上的流通版本過多,其官方發行的版本就有20個。
  2. Android設備形態各異,有平板、車載系統、手機、廣告機等,設備形態的差異,導致Android必須接受各種各樣的適配和定製。
  3. 第三方ROM廠商,深度改造Android,目前各國內手機廠商,基本上都有自己的定製系統,華爲的EMUI,小米的MIUI等

Android的開源爲系統的普及立下了汗馬功勞,但缺點也是很明顯的,導致的碎片化問題,造成了Android系統的混亂,也增加了企業的開發維護成本。那這跟卡頓有什麼關係呢?關係是有的,在Android高速發展的前期,手機ROM定製廠商非常多,其研發能力、定製目的各有差異,一些水平較弱的廠商,定製後的系統美其名曰爲“深度優化系統”,但事實上其性能比不上原生系統,還有些廠商,在原生系統的基礎上加了很多後臺服務,做諸如用戶行爲蒐集、廣告推送等一些定製化需求,導致系統不堪負重。還有些由於優化不當,隱藏漏洞很多,導致嚴重的系統異常,甚至崩潰問題。不過在當前被華爲、小米、VIVO等幾家大廠商瓜分完Android市場以後,這種現象好了很多。但不可否認碎片化後,系統定製商的優化水平,是決定Android系統運行流暢度的因素之一

 

內存回收機制

Android操作系統採用DVM(Dalvik VM),跟JAVA虛擬機類似,來作爲承上啓下的橋樑,DVM繼承了JAVA的GC內存回收機制,而Android中所有的JAVA程序都運行在DVM之上,其內存回收時機和效率,取決於系統的內存回收策略。系統時刻在檢測內存動態,並根據系統的GHM(Generational Heap Memory)內存模型,對不同數據類型分別執行不同的GC操作,但在DVM上執行GC是一個串行過程,簡單來說就是:當系統執行內存回收(GC)的時候其他程序(進程)都將處於暫停狀態,直到回收結束後,其他程序(進程)才得以恢復運行

 

一般情況下的GC並不會導致卡頓,用戶感知性不強,但是連續的GC,會導致進程暫停狀態時間累積加長,以屏幕刷新率60幀的標準,暫停時間超過16ms,就會導致幀率異常,連續的異常丟幀,就可能會被用戶感知了,也就是形成了卡頓。

硬件性能與軟件不匹配

要想得到如絲般順滑的用戶體驗,好的硬件是必不可少的;類比於電腦,五年前的普通電腦,想玩當前的3A遊戲大作,這基本上行不通。手機也是一樣,使用低端性能機器,如內存1G以下跑Android 9以上,或是運行高畫質大型遊戲,同樣也是行不通的。目前市場上的旗艦機,基本上可以通喫應用市場中的所有遊戲,但中低端機型,就可能有壓力了;取決於手機性能的主要指標有:CPU、內存、GPU、EMMC;在選擇Android手機的時候,重點關注這幾項,避免出現小馬拉大車的情況。

應用優化自身不利,導致的卡頓

好的產品體驗是軟硬件共同優化的成果,硬件做的再好,配置再高,軟件拖後腿,那也會造成卡頓、崩潰等不良體驗。本人從事Android領域開發管理多年,以下問題導致卡頓的情況較多:

  1. 不好的大圖片資源處理機制,大圖片就意味着大內存,也就最容易造成內存泄漏,抖動等問題,小則頻繁觸發GC,引起卡頓,大則引發OOM,造成應用崩潰。
  2. 內存泄漏,主要體現在靜態變量引用了本需要回收的對象,導致該對象不能回收。在長時間運行時,如果有存在內存泄漏,這會導致該應用使用的內存越來越多,一般情況下,持續的內存泄漏最終會導致超出系統規定的最大內存限制,應用崩潰,但在未崩潰前,會導致系統可用內存越來越小,從而可能引發其他應用卡頓
  3. 界面UI線程處理不當,一個應用要運行流暢,需要滿足一定的刷新率,也就是在單位時間內給用戶展現的畫面多少,決定用戶感知的流暢程度。如:當界面刷新爲1幀每秒時,用戶感覺畫面是在放PPT一樣,當刷新率爲60幀每秒時,用戶就覺得流暢了。而當工程師在UI線程中處理了過多的耗時操作,導致UI線程來不及處理畫面幀的生成、繪製,導致幀率過低,從而用戶感知卡頓。
  4. 不好的緩存機制,緩存是爲了解決加載速率較低問題的解決方案,選擇優秀的緩存機制在一定程度上能優化用戶體驗。

運行時所需要的資源存在強烈競爭

這點很好理解,如領導分配小王幹兩件事A和B,但是A的優先級比B的要高得多,小王同一時間片只能幹一件事,所以小王就先做A,B就先放着,等A處理完再處理B。同理對於CPU的使用也基本遵循這個原理。從宏觀來看,當CPU佔用率處於一個較高水平時,這時候再運行新的應用,顯然會比CPU處於較低水平時的運行效率要低,也可能造成卡頓。不僅僅是CPU,磁盤IO、內存等也存在類似競爭影響。

總結

關於手機卡頓,有系統方面的原因、硬件方面的原因也有應用層的原因。Android手機的流暢性需要多方面的優化。當然保持良好的手機使用習慣,定期清理、控制後臺運行程序數量等操作也有助於提升流暢度。

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章