1. Disk I/O
SharedPreferences 擴(kuò)展性不好,可以考慮使用扁平化文件+LRU 內(nèi)存緩存,如果有大量keys可以考慮使用SnappyDB。
2. Networking
- 并行和優(yōu)先級(jí)http連接 Volley
- byte buffer 復(fù)用,OkHttp
3. 解析
- 避免使用反射進(jìn)行解析
- 解析大量流數(shù)據(jù)時(shí)使用SAX
- 使用代碼生成器解析器
4. Latency cpu 時(shí)間
- 在應(yīng)用啟動(dòng)時(shí)指獲取必要的信息,從而優(yōu)化啟動(dòng)時(shí)間
- 限制在一個(gè)固定大小的線程池中執(zhí)行異步任務(wù)
- 在Acidity中盡早進(jìn)行網(wǎng)絡(luò)請(qǐng)求
- 監(jiān)測(cè)網(wǎng)絡(luò)連接狀態(tài),從而調(diào)整獲取數(shù)據(jù)策略
- 盡可能地從網(wǎng)絡(luò)獲取關(guān)鍵數(shù)據(jù)
- 在scroll layout中注意View的回收和循環(huán),注意合理地實(shí)現(xiàn)View的回收
- 避免重復(fù)調(diào)用系統(tǒng)服務(wù),啟動(dòng)一次然后在內(nèi)存中緩存使用
- 避免頻繁調(diào)用自定義view的invalidate 和ondraw,盡量一次調(diào)用批量udpate多個(gè)view
- 盡量使用lint和fltten view hierarchies 來(lái)優(yōu)化view
- 避免訪問(wèn)類(lèi)的內(nèi)部成員變量
5. 圖片和scrolling
- 使用高效的圖片庫(kù)避免頻繁GC和內(nèi)存抖動(dòng)
- 使用固定大小的100_100,200_200等來(lái)提高CND的cache
- 避免在客戶(hù)端自己調(diào)整圖片大小,而是直接使用合理大小的圖片
- 不用吧圖片放置在分辨率敏感的文件夾下,這樣的圖片在運(yùn)行時(shí)會(huì)被放大,有時(shí)會(huì)導(dǎo)致OOM
6. GC和內(nèi)存
- 緩存頻繁使用的Object避免GC
- 不用強(qiáng)引用activity context,使用application 的context或者弱引用,這樣可以避免在activity finish之后的內(nèi)存泄漏
7. 渲染
- 優(yōu)化ui線程中頻繁執(zhí)行的操作
- 使用FPS檢測(cè)渲染卡頓問(wèn)題,并優(yōu)化耗時(shí)操作