歡迎訪問[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++寫成的底層具體實現。