一、如何評(píng)價(jià)一個(gè)應(yīng)用的好壞?
好的應(yīng)用
二酝惧、如何評(píng)價(jià)一個(gè)應(yīng)用的性能?
高性能的應(yīng)用
三口叙、快
Android中主線(xiàn)程的關(guān)鍵職責(zé)是處理用戶(hù)交互,在屏幕上繪制像素嗅战,開(kāi)發(fā)中應(yīng)該避免任何阻礙主線(xiàn)程的事情妄田,才能對(duì)用戶(hù)操作及時(shí)響應(yīng)。
分析工具
應(yīng)用慢驮捍、卡頓的根本原因:
1疟呐、繪制任務(wù)太重,繪制一幀耗時(shí)太長(zhǎng)东且;
2启具、主線(xiàn)程太忙,VSync信號(hào)來(lái)時(shí)沒(méi)有準(zhǔn)好繪制數(shù)據(jù)珊泳,導(dǎo)致丟幀鲁冯。
卡頓原因
3.1 UI渲染任務(wù)重
3.1.1 減少布局層級(jí)
- ConstraintLayout、RelativeLayout色查、
- Merge薯演、ViewStub
- 自定義layout
3.1.2 減少繪制時(shí)間
- RelativeLayout有性能低的問(wèn)題,會(huì)對(duì)子view做兩次測(cè)量布局(橫向秧了、縱向)跨扮。有開(kāi)源的只做一次測(cè)量的精簡(jiǎn)版RelativeLayout。
- LinearLayout有weight屬性验毡,也需要兩次測(cè)量衡创。
- 少用wrap_content,減少measure成本
- 刪除無(wú)用的屬性
- 減少過(guò)度繪制晶通,去掉重疊區(qū)域多余的背景Activity主題色钧汹、Window默認(rèn)背景,自定義view時(shí)看不見(jiàn)的區(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 主線(xiàn)程太忙
分析應(yīng)用耗時(shí)可以參看之前的一篇文章 Android性能優(yōu)化之CPU Profiler菱皆。
3.2.1 內(nèi)存優(yōu)化
內(nèi)存的不合理使用對(duì)UI卡頓须误、耗電、穩(wěn)定性都有不同程度的影響仇轻。所以?xú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)問(wèn)題
- 驗(yàn)證優(yōu)化效果
監(jiān)控收集的信息:
- 基礎(chǔ)信息
用戶(hù)信息:賬號(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文件