近幾天将android中需要性能優化的方面總結了一下,大緻如下
性能優化,何為性能優化,
一般在性能測試中,用響應時間,TPS(吞吐量)來表示。
- 通常情況就是,響應時間過長,TPS太低,
- 對于背景開發,還有高并發下記憶體洩露。
- 對于移動開發,有電量優化,記憶體優化兩類
優化方式,(秘密:其實就是優化響應時間,提高TPS而已)
三大類:
- 降低執行時間(利用多線程并發或者分布式提高TPS,緩存(對象緩存,IO,網絡)。
- 資料結構和算法優化(ArrayList,SpareList)。
- 更優的接口調用(JNI),邏輯優化,需求優化)
-
同步改異步(利用多線程提高TPS),提前或者延遲TPS,
網絡優化:
- 連接配接伺服器優化:不用域名,省去DNS解析,動态IP清單,伺服器合理部署(),
- 擷取資料優化政策:連接配接複用(節省連接配接時間,如keep-alive),請求合并(多個請求合成一個),減少請求資料大小(對于POST,做壓縮,對請求頭壓縮,Http1.1不支援,2.0可以,不支援可以通過伺服器對一個請求頭緩存,同樣請求用MD5代替)。
- CDN緩存靜态資源:緩存常見的圖檔,js,css等靜态資源,減少傳回資料的大小(壓縮,精簡資料格式(json),不同裝置傳回不同分辨率的圖檔,增量更新,大檔案下載下傳(斷點續傳)),資料緩存(緩存資料在一定的時間内可以再次請求緩存資料)
-
其他優化方式:預取,分優先級,延遲部分請求,多連結, 代碼優化
緩存(記憶體,檔案,資料庫,網絡),常用的資料,放到記憶體中緩存,
常用的緩存:線程池,圖檔緩存,sd緩存,資料預取緩存,消息緩存,listview緩存,網絡緩存,io緩存,Layout緩存,
資料儲存優化:資料類型(StringBuilder代替String,使用softReference利益回收,final的讀取最快),資料結構的選擇(Arraylist,HashMap,SparseArray)
算法優化,JNI優化,邏輯優化,需求優化,,
多線程,異步提高TPS,
布局優化:
Include Merge,ViewStub,去除不必要的嵌套,使用RelativeLayout性能更好,減少不必要的infalte,全局。用SurfaceView或者TextureView代替View(繪制操作移動到了另一個單獨的線程,SurfaceView不能被像正常試圖一樣,移動縮放,TextureView可以,android4.0引入的)
布局調優工具,hierarchy viewer,
資料庫優化(省略,以後再寫)