Android无法优化应用,Android应用优化总结
原標題:Android應用優化總結
內存泄漏
最常見也是最嚴重的 :持有Activity 與Context引用,生命周期本該短于應用生命周期,該回收的沒被回收掉,導致泄露
檢測手段:leakcanary mit等
Handler泄露
new Handler 替換為 靜態內部類
將持有當前Activity或Context 對象實例化為WeakReference對象
onDestory 時:handler.removeAllMessageAndCallback(null)
高級方案:仍采用靜態內部類,提供CallBack,獨立于使用者,避免Activity與Context直接引用
單例泄露
持有的Activity 使用WeakReference ,Context 使用ApplicationContext
去除不必要的Activity引用
泄露不止是Activity 與context,一旦持有比應用生命周期短的其他對象,也會發生泄露
此時需要考慮使用WeakReference
Fragment 之間靜態屬性引用 泄露
消滅靜態屬性
靜態屬性會一直持有當前Activity或Context引用
Fragment之間通訊可使用接口,Activity實現該接口, onAttach 將Activity轉換為接口對象
Activity操作Fragmeng方式不變
高級方案:可使用MVVM ,ViewModel方式
Cursor 等游標、流的關閉
數據庫操作:增刪改查的游標,文件、網絡操作流
用后close
List
onDestory銷毀List:clear
WebView
onDestory銷毀WebView :removeJava、removeAllView
高級方案:多進程
避免原則
盡可能保證持有的對象及時被回收,必須使用Activity的采用WeakReference,能使用ApplicationContext的不使用 當前Context
其他對象生命周期短于應用的,一旦持有了Context或Activity都有可能發生泄露,盡可能采用WeakReference
代碼優化 優化的數據結構
HashMap 替換為SparseArray 等
枚舉、匿名內部類、反射等
減少使用
布局,涉及過渡繪制等 背景
窗體背景,多余背景,減少過渡繪制有效手段
過渡繪制
include標簽(通常用于公共布局組件)、merge(有效減少層級,但會出現不可控因素,屬性失效等問題)、viewsub
減少不必要的層級
控件優化
比較突出的:
ImageView 與TextView 呈上下左右關系時,優先考慮
TextView增加drawable屬性,即compoundDrawable
布局設置:drawableLeft ,drawableTop, drawableRight,drawableBoottom
圖片文字間距使用:drawablePadding
代碼設置:setCompoundDrawablesRelativeWithIntrinsicBounds(left,top,right,bottoom)
內存、網絡、電池
BitMap的回收,應用不可見的監聽,減少app被系統關閉的幾率
安裝包與第三方
無用資源,大圖,圖片適配,減少不必要的圖片,png替換為.9,簡單圖片代碼實現優先
lib 文件
架構
業務、實現分離
MVP或MVVM等
viewmodel
代碼規則:命名,方法數,自解釋
目的:便于維護
流程
測試環節
如:用例覆蓋,情景覆蓋,功能效果與產品需求匹配度等,數據抓取,可考慮以下方案增強
全員測試
開發階段:
由開發把控,確認主要流程功能完成后打包安排測試,主要為產品確認功能實現情況,及時發現問題,以免后期不斷產生功能修改,耽誤開發進度
測試階段:
除測試外所有相關人員,包括但不限于:前后端開發、產品、項目負責人
上線前:
最后的問題發現修改階段,也是最后的問題修改階段,避免上線前后發生重大問題
測試次數:
問題修改完一批次之后統一回歸,可分為第一輪至第三輪甚至四輪,根據測試及bug情況安排,除第一輪外后續皆主要為回歸,最后一輪進行線上環境測試,確認功能與穩定性,正式上線前可考慮發布小范圍用戶安裝包進行用戶實際環境測試,俗稱灰度
測試用例
測試拿到需求之后可編寫測試用例,此用例可指導其他人進行功能驗證,減少測試人員壓力
目的:控制bug數量,減少測試費時,盡可能的發現隱藏的問題,避免上線后發生重大事故
提升項目質量
數據抓取
可使用Charles,Fiddler
數據類問題可直接由bug測出人員定位,避免其他人浪費時間定位
版本分離
bug分離
上線后的bug確認是否為重大bug是否需要修改,一旦確認可下期修改,則可列為后期版本優先修改內容
api分離
最基本的數據穩定性保持方法
api上線時,安裝包未必會及時被上傳,此時線上環境已經發生變動,而用戶所用仍為老版本,一旦數據不兼容,用戶無法正常使用
api可根據app的versioncode與平臺等多參數進行數據隔離
問題監測
主要為穩定服務
手段包括但不限于:
真實用戶實時崩潰日志:百度等
內嵌的日志收集上傳功能
后臺統計與收集
開發階段的崩潰收集:崩潰截取顯示上傳功能
開發階段
編寫高質量代碼
性能優化
leakcanary 內存泄露
findbug bug 、隱藏問題
removed unused resoures 剔除廢棄資源
lint 找出隱藏問題,優化代碼,重點關注Performance 如泄露,Correctness,Security
大家都在看
805941275 435399051返回搜狐,查看更多
責任編輯:
總結
以上是生活随笔為你收集整理的Android无法优化应用,Android应用优化总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: matlab给plc发送命令,想学习下如
- 下一篇: Android开机时间统计,androi