一、如何評(píng)價(jià)一個(gè)應(yīng)用的好壞?

好的應(yīng)用
二、如何評(píng)價(jià)一個(gè)應(yīng)用的性能?

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

分析工具
應(yīng)用慢、卡頓的根本原因:
1、繪制任務(wù)太重,繪制一幀耗時(shí)太長(zhǎng);
2、主線程太忙,VSync信號(hào)來時(shí)沒有準(zhǔn)好繪制數(shù)據(jù),導(dǎo)致丟幀。

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

內(nèi)存優(yōu)化

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

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

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

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