對Android App 中卡頓的處理和分析

2021-09-24 11:46:36 字數 2007 閱讀 3414

使用者對卡頓的感知, 主要**於介面的重新整理. 而介面的效能主要是依賴於裝置的ui渲染效能. 如果我們的ui設計過於複雜, 或是實現不夠友好,計算繪製演算法不夠優化, 裝置又不給力, 介面就會像卡住了一樣, 給使用者卡頓的感覺.,讓使用者體驗感到很不爽,所以抽空總結一下    希望對大家能有所幫助

1.16ms原則   

android 在不同的版本都會優化「ui的流暢性」問題,但是直到在android 4.1版本中做了有效的優化,這就是project butter。 

project butter 加入了三個核心元素: vsync、triple buffer 和 choreographer。其中,vsync 是理解project buffer的核心。

vsync:產生乙個中斷訊號 

triple buffer:當雙 buffer 不夠使用時,該系統可分配第三塊 buffer 

choreographer:這個用來接受乙個 vsync 訊號來統一協調ui更新

對於16ms原則想深入的了解的可以去研究研究 ,下面主要說說產生卡頓的原因和場景

1.1    過於複雜的布局

介面效能取決於 ui 渲染效能. 我們可以理解為 ui 渲染的整個過程是由 cpu 和 gpu 兩個部分協同完成的。

其中, cpu 負責ui布局元素的 measure, layout, draw 等相關運算執行. gpu 負責柵格化(rasterization), 將ui元素繪製到螢幕上。

如果我們的 ui 布局層次太深, 或是自定義控制項的 ondraw 中有複雜運算, cpu 的相關運算就可能大於16ms, 導致卡頓。

解決方案: 

我們需要借助 hierarchy viewer 這個工具來幫我們分析布局了. hierarchy viewer 不僅可以以圖形化樹狀結構的形式展示出ui層級, 還對每個節點給出了三個小圓點, 以指示該元素 measure, layout, draw 的耗時及效能。

1.2    過度的繪製

overdraw: 用來描述乙個畫素在螢幕上多少次被重繪在一幀上.

通俗的說: 理想情況下, 每屏每幀上, 每個畫素點應該只被繪製一次, 如果有多次繪製, 就是 overdraw, 過度繪製了。 常見的就是:繪製了多重背景或者繪製了不可見的ui元素.

解決方案: 

android系統提供了視覺化的方案來讓我們很方便的檢視overdraw的現象: 

在」系統設定」–>」開發者選項」–>」除錯gpu過度繪製」中開啟除錯: 

此時介面可能會有五種顏色標識:

overdraw indicator

原色: 沒有overdraw

藍色: 1次overdraw

綠色: 2次overdraw

粉色: 3次overdraw

紅色: 4次及4次以上的overdraw

1.3   ui執行緒的複雜運算

ui執行緒的複雜運算會造成ui無響應, 當然更多的是造成ui響應停滯, 卡頓。產生anr已經是卡頓的極致了。

解決方案: 

關於運算阻塞導致的卡頓的分析, 可以使用 traceview 這個工具

1.4   頻繁的使用gc

為什麼說頻繁的 gc 會導致卡頓呢? 

簡而言之, 就是執行 gc 操作的時候,任何執行緒的任何操作都會需要暫停,等待 gc 操作完成之後,其他操作才能夠繼續執行, 故而如果程式頻繁 gc, 自然會導致介面卡頓。

導致頻繁gc有兩個原因:

記憶體抖動(memory churn), 即大量的物件被建立又在短時間內馬上被釋放。

瞬間產生大量的物件會嚴重占用 young generation 的記憶體區域, 當達到閥值, 剩餘空間不夠的時候, 也會觸發 gc。即使每次分配的物件需要占用很少的記憶體,但是他們疊加在一起會增加 heap 的壓力, 從而觸發更多的 gc。

解決方案: 

一般來說瞬間大量產生物件一般是因為我們在**的迴圈中 new 物件, 或是在 ondraw 中建立物件等。 

還是是盡量不要在迴圈中大量的使用區域性變數。所以說這些地方是我們尤其需要注意的。

以上就是總結的卡頓現象的可能及解決辦法   後期會持續更新

卡頓引起的調查

也是很倒霉,每次出現問題都是我當值。8 33,收到現場反饋 客戶端 網頁使用體驗極差,長時間loading。出現這種問題,在排除硬體裝置 網路原因後,無非是應用伺服器或資料庫原因。應用伺服器介面日誌 乙個資料庫監控頁面裡面的效果 監控太多,不一一貼出來了。經過檢查,當時的資料庫sql執行是正常的,沒...

電腦卡頓的問題

最近筆記本非常的卡,開啟檔案管理器都要十幾秒,還動不動來個未響應,正好要弄乙個課程設計,弄了半天,啥也沒做,時間都花在了等待電腦響應上面,想來就氣,當時就想直接砸電腦了。電腦很卡,無論開啟什麼頁面或者軟體,總是很卡,就好像放ppt一樣,動不動還未響應,然後卡退。電腦雖然很卡,但啟動並不慢,基本上9秒...

頁面卡頓的優化 圓角

今天產品經理告訴我 誒,那個誰,這個介面很卡誒!你看看什麼情況。於是我掏出了instrument裡的core animation看看fps,發現滑動的時候fps特別低orz!產生卡頓的原因 首先,查閱資料看下為什麼會產生卡頓的原因。在 ios 系統中,影象內容展示到螢幕的過程需要 cpu 和 gpu...