0 內(nèi)存泄漏
-
LeakCanary工具
LeakCanary是大名鼎鼎的square出的一款開源的用來做內(nèi)存泄露檢測的工具
具體用法看上面鏈接,整體用下來就這一個就可以了,很強大! - 單例模式中內(nèi)存泄露,比如static的context
- 注冊的接口、觀察者模式等add/remove沒有成對出現(xiàn)導致的內(nèi)存泄露
- cursor、file io等流接口忘記關閉導致的內(nèi)存泄露
- Handler、AsyncTask等內(nèi)部類導致的內(nèi)存泄露
- bitmap回收,集合中對象回收,webview銷毀等情況導致的內(nèi)存泄露
1 內(nèi)存優(yōu)化
使用CPU GPU Memory Montor等AS自帶工具,來時刻觀察內(nèi)存使用情況,使用HPROF Viewer & Analyzer來分析hprof文件
- java語法層面
比如String StringBuffer StringBuilder,“1” 不是來源對象就用String,否則StringBuilder,線程安全就是StringBuffer - 數(shù)據(jù)結(jié)構
SparseArray、LongSparseArray、ArrayMap等代替HashMap,前提是數(shù)據(jù)量不大在千個級別,因為避免了自動裝箱,使用了二分查找等方法,所以效率高 - 根據(jù)業(yè)務情況選擇數(shù)據(jù)結(jié)構
比如數(shù)據(jù)新增、刪除比較多就用LinkedList,動態(tài)數(shù)據(jù)訪問比較多就用ArrayList - 根據(jù)業(yè)務情況選擇算法
普通遍歷、二分查找、快排等 - 避免創(chuàng)建不必要的對象
比如循環(huán)中避免創(chuàng)建大量不可變對象,使用緩存來避免創(chuàng)建大量對象 - 盡量不用浮點型
- 未完待續(xù)