Android:視圖與佈局優化

優化重於泰山

對於同樣機器環境上的應用來說,拋去受CPU、屏幕和系統GUI系統的固有時間消耗外,要實現流暢的動畫的核心也就是減少視圖Draw的時間。

這裏有幾點經驗可以跟大家分享一下:

  1. 儘量不要在刷新時做耗時操作,必須準備數據,創建圖片,圖片變換等,數據和圖片都應該在之間就加載到內存中,圖片變換用canvas的變換來實現。
  2. 同一個界面中多個動畫重疊出現時,儘量將動畫的刷新過程統一進行刷新,避免頻繁的invalidate,尤其是多個動畫有時序上的關係時更應該統一。
  3. 儘量使用帶有參數的invalidate來刷新,這樣可以減少很多運算量。
  4. 合理的環境下使用surfaceview來操作,比如播放視頻等,這種刷新耗時比較大的情況。
  5. 開啓硬件加速,硬件加速由於採用了顯示列表的概念,所以刷新過程也有很大的優化,但是會增加額外的8M內存佔用。

    • Animation流暢度
      動畫線程中,少做動畫外的事情(比如拖動的時候同時做了圖片加載,或進度轉圈),或用子線程去做這一件事;

      多個View做動畫,變成一個View做多個動畫,從而減少View Tree遞歸調用;
      消失的或不在屏幕中的bg,view不繪製,減小繪製面積(bg繪製前用clipRect控制),減小緩存尺寸;

      不要用requestLayout實現動畫,用矩陣變換代替,少用clipPath剪切圖片;

      不要設置listview的selector;

      動畫時間控制在400ms以內;

      利用好硬件加速;

      動畫用nineoldandroid或者在實現的時候儘量把動畫的繪製都放到一個消息循環裏面;

    • Layout加載速度

      簡化動畫布局(包括view層級和數量),不用的佈局可以用viewstub包住在用的時候inflate;

      提前將佈局inflate傳入,記得處理static引用;

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