android UI卡頓問題學習

  轉自https://blog.csdn.net/joye123/article/details/79425398網絡

https://blog.csdn.net/zhenjie_chang/article/details/52584967異步

 

  卡頓優化

  卡頓:從用戶角度說,App操做起來緩慢,響應不及時,列表滑動一頓一頓的,動畫刷新不流暢等等一些直觀感覺。從系統角度來講,屏幕刷新的幀率不穩定,沒法保證每秒繪製60幀,也就是說有掉幀的狀況發生。佈局

 

  對於開發過程,出現卡頓的主要緣由是主線程作了一些不應作的事,或者主線程作不了事情了。性能

  • 佈局渲染(解析、測量、佈局、渲染)
  • 動畫執行
  • Binder通訊
  • 界面響應

  主線程主要是作以上四個方面的工做,若是在主線程作一些耗時操做(網絡請求、IO讀寫等),或者被其餘線程掛起(GC),那麼頁面刷新沒法在16ms內完成,就會出現掉幀的狀況。優化

 

 

    

  • 原色:沒有過分繪製
  • 藍色:過分繪製1次
  • 綠色:過分繪製2次
  • 粉色:過分繪製3次
  • 紅色:過分繪製4次或更多

  請注意,這些顏色是半透明的,所以,您在屏幕上看到的確切顏色取決於您的界面內容。能夠經過此功能查看哪些頁面的佈局層級過深。動畫

 

  

  常見卡頓緣由及解決方案

 

  過分繪製

    去除沒必要要的背景色

  • 設置窗口背景色爲通用背景色,去除根佈局背景色。
  • 若頁面背景色與通用背景色不一致,在頁面渲染完成後移除窗口背景色
  • 去除和列表背景色相同的Item背景色

    佈局視圖樹扁平化

  • 移除嵌套佈局
  • 使用merge、include標籤
  • 使用性能消耗更小布局(TableLayout、ConstraintLayout)

    減小透明色,即alpha屬性的使用

  • 經過使用半透明顏色值(#77000000)代替

    其餘

  • 使用ViewStub標籤,延遲加載沒必要要的視圖
  • 使用AsyncLayoutInflater異步解析視圖

 

  主線程耗時操做

  • Json數據解析耗時(Cache類)
  • 文件操做(獲取所屬渠道名稱)
  • Binder通訊(獲取系統屬性(mac地址))
  • 正則匹配(Hybird 通訊)
  • 相機操做:初始化、預覽、中止預覽、釋放(反掃)
  • 組件初始化(推送)
  • 循環刪除、建立View(更多頁面)
  • WebView首次初始化

 

佈局優化的一些策略

1. <include>標籤
2. <viewstub>標籤
3.<merge>標籤
4.去除沒必要要的嵌套和View節點
5.減小沒必要要的infalte
6.View局部更新.net

相關文章
相關標籤/搜索