Android面試寶典 - 優(yōu)化篇

一、性能優(yōu)化

1. 布局優(yōu)化

  1. 盡量使用include,merge,ViewStub標簽
  2. 避免冗余嵌套以及過于復雜的布局,必要時可使用約束布局
  3. View的隱藏盡量使用GONE替代INVISIBLE
  4. 使用權重weight后將View的寬width和高height設置為0,減少運算
  5. 存在復雜嵌套布局時考慮自定義View替代,減少measure和layout次數(shù)
  6. 減少不必要的背景設置,避免過度繪制

2. 列表優(yōu)化

  1. 使用RecyclerView替代傳統(tǒng)的ListView和GridView
  2. 復用getView中的相關View,避免重復獲取實例導致卡頓
  3. 列表滑動過程中不進行UI繪制,圖片加載

3. 包體積優(yōu)化

  1. 資源圖片采用Webp格式
  2. 較大的資源圖片可以使用AS自帶能力壓縮,也可以借助tingPng壓縮
  3. 不同顏色的多個相同圖標,只添加一個純色圖片資源,實際使用時用tint著色
  4. 打包時加入混淆
  5. 遠程庫依賴時盡量有限compileOnly

4. 卡頓掉幀優(yōu)化

  1. 字符串拼接盡量使用StringBuffer和StringBuilder代替String
  2. onCreate中減少不必要元素的初始化以及耗時操作,加快Activity啟動速度
  3. 避免在View的draw,measure,layout執(zhí)行耗時以及耗內(nèi)存操作,尤其draw方法中
  4. 嚴格遵守ANR規(guī)避原則,避免在UI線程中做耗時操作,譬如多次數(shù)據(jù)庫操作,HTTP請求等
  5. 必要的耗時操作放到子線程執(zhí)行,執(zhí)行結(jié)束后拋到主線程更新UI,子線程使用線程池管理,減少線程創(chuàng)建,內(nèi)存消耗

二、安全編碼

  1. 敏感信息不可直接輸出日志,如果必要,也需匿名化后輸出
  2. 方法入?yún)⒌膶ο笫褂们靶枰锌招r?/li>
  3. 數(shù)組、列表等集合操作時需要做好越界校驗
  4. io流操作需要try catch,io流和數(shù)據(jù)庫等操作后需要手動close
  5. 廣播和監(jiān)聽等觀察者需要反注冊
  6. 開源組件需要掃描是否存在公開披露的漏洞
  7. 項目中引入的so庫中的C代碼需要掃描是否存在不安全函數(shù)
  8. 檢查項目中是否存在dos攻擊,比如sql注入等等

三、入庫校驗

  1. 可能為空的對象,使用前判空
  2. 無用代碼,注釋掉的代碼需刪除
  3. 未初始化的變量被使用
  4. 非靜態(tài)內(nèi)部類
  5. 超大類文件,代碼行數(shù)閾值
  6. 超大資源文件,圖片大小閾值
  7. 跨組件引用impl
  8. 類型強轉(zhuǎn)前校驗
  9. 方法和注釋是否匹配
  10. 子類是否正確重寫父類抽象方法和接口中的方法
最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容