一、性能優(yōu)化
1. 布局優(yōu)化
- 盡量使用include,merge,ViewStub標簽
- 避免冗余嵌套以及過于復雜的布局,必要時可使用約束布局
- View的隱藏盡量使用GONE替代INVISIBLE
- 使用權重weight后將View的寬width和高height設置為0,減少運算
- 存在復雜嵌套布局時考慮自定義View替代,減少measure和layout次數(shù)
- 減少不必要的背景設置,避免過度繪制
2. 列表優(yōu)化
- 使用RecyclerView替代傳統(tǒng)的ListView和GridView
- 復用getView中的相關View,避免重復獲取實例導致卡頓
- 列表滑動過程中不進行UI繪制,圖片加載
3. 包體積優(yōu)化
- 資源圖片采用Webp格式
- 較大的資源圖片可以使用AS自帶能力壓縮,也可以借助tingPng壓縮
- 不同顏色的多個相同圖標,只添加一個純色圖片資源,實際使用時用tint著色
- 打包時加入混淆
- 遠程庫依賴時盡量有限compileOnly
4. 卡頓掉幀優(yōu)化
- 字符串拼接盡量使用StringBuffer和StringBuilder代替String
- onCreate中減少不必要元素的初始化以及耗時操作,加快Activity啟動速度
- 避免在View的draw,measure,layout執(zhí)行耗時以及耗內(nèi)存操作,尤其draw方法中
- 嚴格遵守ANR規(guī)避原則,避免在UI線程中做耗時操作,譬如多次數(shù)據(jù)庫操作,HTTP請求等
- 必要的耗時操作放到子線程執(zhí)行,執(zhí)行結(jié)束后拋到主線程更新UI,子線程使用線程池管理,減少線程創(chuàng)建,內(nèi)存消耗
二、安全編碼
- 敏感信息不可直接輸出日志,如果必要,也需匿名化后輸出
- 方法入?yún)⒌膶ο笫褂们靶枰锌招r?/li>
- 數(shù)組、列表等集合操作時需要做好越界校驗
- io流操作需要try catch,io流和數(shù)據(jù)庫等操作后需要手動close
- 廣播和監(jiān)聽等觀察者需要反注冊
- 開源組件需要掃描是否存在公開披露的漏洞
- 項目中引入的so庫中的C代碼需要掃描是否存在不安全函數(shù)
- 檢查項目中是否存在dos攻擊,比如sql注入等等
三、入庫校驗
- 可能為空的對象,使用前判空
- 無用代碼,注釋掉的代碼需刪除
- 未初始化的變量被使用
- 非靜態(tài)內(nèi)部類
- 超大類文件,代碼行數(shù)閾值
- 超大資源文件,圖片大小閾值
- 跨組件引用impl
- 類型強轉(zhuǎn)前校驗
- 方法和注釋是否匹配
- 子類是否正確重寫父類抽象方法和接口中的方法