一、如何評價一個應用的好壞?

好的應用
二、如何評價一個應用的性能?

高性能的應用
三、快
Android中主線程的關鍵職責是處理用戶交互,在屏幕上繪制像素,開發(fā)中應該避免任何阻礙主線程的事情,才能對用戶操作及時響應。

分析工具
應用慢、卡頓的根本原因:
1、繪制任務太重,繪制一幀耗時太長;
2、主線程太忙,VSync信號來時沒有準好繪制數據,導致丟幀。

卡頓原因
3.1 UI渲染任務重
3.1.1 減少布局層級
- ConstraintLayout、RelativeLayout、
- Merge、ViewStub
- 自定義layout
3.1.2 減少繪制時間
- RelativeLayout有性能低的問題,會對子view做兩次測量布局(橫向、縱向)。有開源的只做一次測量的精簡版RelativeLayout。
- LinearLayout有weight屬性,也需要兩次測量。
- 少用wrap_content,減少measure成本
- 刪除無用的屬性
- 減少過度繪制,去掉重疊區(qū)域多余的背景Activity主題色、Window默認背景,自定義view時看不見的區(qū)域可以不用繪制
canvas.clipRect()。同一個區(qū)域避免繪制多次。 - 從設計上減少圓角、陰影、透明、動效,可大幅降低繪制時間
- 內容預繪制,比如
StaticLayout、優(yōu)化后的Textview -->PrecomputedText
3.1.3 布局復用
- include
- view pool、view holder
3.2 主線程太忙
分析應用耗時可以參看之前的一篇文章 Android性能優(yōu)化之CPU Profiler。
3.2.1 內存優(yōu)化
內存的不合理使用對UI卡頓、耗電、穩(wěn)定性都有不同程度的影響。所以內存優(yōu)化是性能優(yōu)化中最重要的優(yōu)化之一。

內存優(yōu)化

圖片內存優(yōu)化
具體實現(xiàn)可以參考之前的文章《Android中高效的顯示圖片》。
3.2.2 存儲優(yōu)化

存儲優(yōu)化
四、穩(wěn)

穩(wěn)定性
4.1 Code Review 方法論
4.1.1 code review的時機:
- 底層公共模塊、與其他模塊耦合的功能變更代碼;
- 重大feature代碼;
- 新同事的代碼;
- 發(fā)布前緊急集成的代碼;
4.1.2 code review的人:
- 團隊審查;
- 模塊負責人;
- 結對審查;
4.1.3 code review流程:
- 先審查實現(xiàn)思路;
- 再審查設計模式;
- 接著審查核心代碼;
- 最后審查實現(xiàn)代碼。
五、小

瘦身
六、監(jiān)控
監(jiān)控的意義:
- 發(fā)現(xiàn)問題
- 驗證優(yōu)化效果
監(jiān)控收集的信息:
- 基礎信息
用戶信息:賬號、設備號、地理位置
設備信息:系統(tǒng)版本、硬件型號、APP版本
系統(tǒng)狀態(tài):內存狀態(tài)、CPU使用率、網絡狀態(tài)
2、錯誤信息
crash堆棧、anr trace文件