內存泄露的檢測。異步
1. 在Android Studio中運行你的應用,而後切換到輸出窗口的Android tab。函數
2. 盡情的玩耍你的應用,最好各個功能都用到,若是是Viewpager,則多滑動一些頁面,觀察內存的增加狀況。對象
若是是下面這樣大體平穩的曲線,就沒有內存泄露。blog
若是是下面這樣,階梯狀的曲線,基本是有內存泄露了。圖片右上角顯示已經分配了178.16M,一旦這個數字超過200M,程序就會崩掉。進程
若是得知哪些函數耗費了大量內存呢?能夠記錄內存的使用過程,加以分析,點擊內存窗口的Start Allocation Tracking按鈕開始記錄,使用完再次點擊中止記錄。圖片
在彈出的記錄文件中能夠找到使用內存較多的函數調用。這個方法瀏覽內存使用的狀況,不能肯定內存泄露的地方。內存
一點經驗:it
前者保證再也不顯示的頁面(Off-Screen page)可以被及時刪除,釋放掉內存,可是bitmap內存再也不此列。io
使用bitmap是要儘可能使用小尺寸的,由於Android中一個bitmap佔多大內存是由其尺寸決定的,而不是其所佔硬盤空間的大小決定的。好比一個512 * 512的色彩斑斕的圖片,一個1024 * 1024的黑白圖片,前者所佔硬盤空間更大,可是加載到Android中,後者所用內存確是前者的四倍!由於Android是按 1024 * 1024來分配內存,它無論你像素是什麼樣色。垃圾回收
bitmap = null是一句頗有用的代碼。這樣能夠再也不引用某個對象,加快垃圾回收的進程。
ImageView.setImageDrawable(null)也是脫離對以前設置的位圖的引用。急速垃圾回收。
上面這兩句放到Activity或者Fragment的onDestroy方法中,有奇效!
記得在Activity或者Fragment的onDestroy方法中將AsyncTask的實例置空。不然裏面引用的Bitmap內存沒法釋放!
若是使用ASyncTask匿名對象則可忽略此條。
==