應(yīng)用穩(wěn)定性優(yōu)化
注:本文是為公司項目出優(yōu)化方案時所寫情屹,有一定針對性局限性坪仇,如有問題歡迎討論。
- 內(nèi)存優(yōu)化
內(nèi)存優(yōu)化主要是規(guī)避內(nèi)存泄露和圖片及時回收垃你,以免導(dǎo)致內(nèi)存溢出系統(tǒng)拋出OOM錯誤椅文。監(jiān)測工具:DDMS Heap 分析內(nèi)存使用情況,LeakCanary 監(jiān)聽內(nèi)存泄露惜颇。
具體優(yōu)化的功能點:
- 首頁ViewPager+Fragment組合皆刺,修改viewpager策略,只保留當(dāng)前頁的數(shù)據(jù)內(nèi)容凌摄,其他頁面不在前臺則銷毀羡蛾,并把數(shù)據(jù)存到數(shù)據(jù)庫。并且為保證流暢性锨亏,在滑動時候初始化痴怨,在初始化時候讀數(shù)據(jù)庫數(shù)據(jù),在展示到前臺時拉去網(wǎng)絡(luò)數(shù)據(jù)(過多長時間以后)器予,實現(xiàn)懶加載浪藻。
- 文章列表,建議縮小縮略圖展示尺寸乾翔,增加清晰度爱葵。并且每張圖的生命周期跟隨當(dāng)前頁面銷毀而釋放。
- 包內(nèi)資源圖反浓,盡量進(jìn)行壓縮萌丈,UI壓縮,超大圖片盡量能夠用jpg格式替換png(Google是不建議這樣做的雷则,但是這樣顯示效果好占地少浓瞪,可以借用第三方工具加載)。
-
使用LeakCanary 來監(jiān)測 內(nèi)存泄露情況巧婶,并逐個解決乾颁。常見內(nèi)存泄露有Handler 和Timer內(nèi)存泄露(使用軟引用持有Context),非靜態(tài)內(nèi)部類創(chuàng)建靜態(tài)實例造成的內(nèi)存泄漏等等艺栈。
*使用DDMS Heap 分析內(nèi)存使用情況以及使用Monitors查看內(nèi)存主動回收情況英岭。
-
布局優(yōu)化& 界面卡頓監(jiān)測
開啟安卓手機(jī)GPU呈現(xiàn)模式分析,檢測應(yīng)用流暢度湿右。開啟安卓手機(jī)開發(fā)者選項中 Enable GPU Overdraw 诅妹,查看應(yīng)用繪制次數(shù),減少頁面重繪。使用BlockCanary 監(jiān)測UI卡頓現(xiàn)象吭狡。具體該怎么檢測界面是否卡頓:
- 肉眼觀察
- 在安卓手機(jī)開發(fā)者選項中開起幀率顯示尖殃,根據(jù)幀率判斷是否界面卡頓。
- 第二開啟安卓手機(jī)開發(fā)者選項中的GPU呈現(xiàn)模式分析划煮,看條形圖分辨應(yīng)用是否卡頓送丰,什么時候卡頓。條形圖怎么看
具體該怎么檢測是否過度繪制:
- 看布局文件,嵌套深度弛秋。
- 打開 安卓手機(jī)開發(fā)者選項中 Enable GPU Overdraw 查看應(yīng)用繪制次數(shù) 繪制次數(shù)怎么看怎么優(yōu)化
- 查看DDMS中的 dump view hierarchy for ui automator 布局嵌套情況
- 友盟&BugTags 錯誤修改
根據(jù)友盟或者bugtags錯誤信息器躏,定位到具體代碼,找出問題及時更改蟹略。減少錯誤率登失。 - 單元測試&MVP
將 Model業(yè)務(wù)邏輯處理 和 View頁面處理分開,利用Android Studio中進(jìn)行單元測試和UI測試挖炬。
** 最終目標(biāo):錯誤率降低到千分之一以下 **
安裝包大小優(yōu)化
- 資源圖片優(yōu)化&無用資源文件刪減
使用tinyPng進(jìn)行智能有損壓縮圖片揽浙。特大圖片使用jpg代替png。使用Android lint命令查找并刪除沒有用到的資源意敛。
- 代碼混淆整理&剔除無用代碼
刪除無用的代碼馅巷,整理混淆語法,對字節(jié)碼進(jìn)行縮減體積空闲、優(yōu)化令杈。 - 皮膚、表情包在線化(插件化)
表情包和皮膚資源可以做成擴(kuò)展包形式一來可以云更新碴倾,還可以減少安裝包大小逗噩。 - 依賴庫整理&去除無用語言資源
整理依賴庫,功能相近的庫擇小擇優(yōu)選取跌榔,去除重復(fù)庫异雁。通過配置resConfigs 只選擇英語和中文語言包。
** 最終目標(biāo):整包大小減少百分之40左右 **
網(wǎng)絡(luò)速度優(yōu)化
- 合并接口&優(yōu)化接口刪除冗余字段
相近內(nèi)容合并到一個接口返回僧须,避免頻繁的網(wǎng)絡(luò)請求纲刀,刪除接口中的冗余字段,減少數(shù)據(jù)量担平。 - 新聞詳情緩存&考慮使用H5+原生形式實現(xiàn)正文
使用HTML5瀏覽正文詳情(支持圖文混排且更流暢:目前的詳情會跳布局示绊,這樣會讓人感覺起來卡頓,因為展位圖并不能一定等于圖片大性萋邸)面褐,使用原生控件協(xié)助完成評論等其他交互。 - 預(yù)下載重要數(shù)據(jù)
在wifi情況下后臺靜默下載取胎,必要資源展哭,比如應(yīng)用全局展示的廣告等等湃窍。 - 使用https
使用https防止流量劫持、抓包及爬蟲匪傍。對通信內(nèi)容進(jìn)行加密您市。
** 最終目標(biāo):讓每一步網(wǎng)絡(luò)操作都能夠可接受時間內(nèi)得到響應(yīng) **
應(yīng)用省流優(yōu)化
- GIF預(yù)覽圖
流量情況需要點擊Gif圖片才會動 - webP圖片格式
服務(wù)端存儲用七牛,Android客戶端用Fresco(支持webP動圖)。
** 最終目標(biāo):盡可能的節(jié)省流量 **
多版本快速開發(fā)
- MVP架構(gòu)
MVP分離了view和model層使之解耦役衡,方便進(jìn)行單元測試茵休,方便邏輯移植。 - 提出公共module
同質(zhì)化功能點放到公共module中映挂,方便引用到其他項目中泽篮。 - 插件化開發(fā)
根據(jù)功能點將應(yīng)用模塊化盗尸,例如直播柑船,錄制等等。
** 最終目標(biāo):功能快速移植泼各,降低代碼耦合度**
下期分享預(yù)告:
仿微信朋友圈(snapchat)圖片滑動退出手勢交互