2017.03.12 Android卡頓分析


歡迎訪問[Android日記][1],如有轉載請注明Android日記 http://androiddiary.site
2017.3.12 周日 晴 北京

寫日記

記錄讀書筆記

卡頓

????Android應用啟動慢,使用時經常卡頓,是非常影響用戶體驗的,應該盡量避免出現。卡頓的場景有很多,按場景可以分成4類:UI繪制、應用啟動、頁面跳轉、事件響應。在這四種場景下又有多個小分類,基本上覆蓋了卡頓的各個場景。

  • UI:繪制、刷新
  • 啟動:安裝啟動、冷啟動、熱氣的
  • 跳轉:頁面切換、前后臺切換
  • 響應:按鍵、系統事件、滑動

????這4種卡頓場景的根本原因又可以分成兩大類。

  • 界面繪制:主要原因是繪制的層級深、頁面復雜、刷新不合理,由于這些原因導致卡頓的場景更多出現在UI和啟動后的初始界面以及跳轉到頁面的繪制上。
  • 數據處理:導致這種卡頓場景的原因是數據處理量太大,一般分為三種情況,一是數據處理在UI線程(這種應該避免),二是數據處理占用CPU高,導致主線程拿不到時間片,三是內存增加導致GC頻繁,從而引起卡頓。
    引起卡頓的原因有很多,但不管怎么樣的原因和場景,最終都是通過設備屏幕上的顯示來到達用戶,歸根到底就是顯示有問題,所以,要解決卡頓,就要先了解Android系統的顯示原理。

顯示原理

????Android的顯示過程可以簡單概括為:Android應用程序發起繪制任務經過測量、布局、繪制后的surface緩存數據,通過SurfaceFlinger把數據渲染到顯示屏幕上,通過Android的刷新機制來刷新數據。也就是說應用層負責繪制,系統層負責渲染,通過進程間通信把應用層需要繪制的數據傳遞到系統層服務,系統層中的SurfaceFlinger服務通過刷新機制把數據更新到屏幕。
????Android的圖形顯示系統采用的是Client/Server架構。SurfaceFlinger(Server)由C++代碼編寫。Client端代碼分為兩部分,一部分是由Java提供給應用使用的API,另一部分則是由C++寫成的底層具體實現。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容