Android 中內存泄露之我的不解(1)

據說android 分給圖片的內存只有8MB?

然後我就測試下一次加載多少MB 的圖片會出錯。網上找了幾張1MB+的圖片。代碼中構建了gallery 用來加載這些圖片,但是放進Gallery中的drawable 的內存已經30MB+了。運行程序依舊不會崩潰。。在模擬器上好像還很流程?

那麼問題來了? 是android對drawable做了處理?這種圖在android中佔用內存很小?還是根本不是8MB?第二種情況有點不可能。那麼開始動手測試下應用到底佔用了多少內存。。。

這說明我們已經分配了2.4MB。進程中還有2.6mb爲分配。。下面我再加入30張1MB的圖片。

結果程序還是沒有崩潰。。。內存情況變化爲:
  3.129 MB 2.385 MB 762.133 KB 76.21% 46,493   。。。蛋疼了。。還有763KB。。如果沒有自由空間了是不是該崩潰了?

加入了100MB以上的圖片  堆裏的內存使用情況 1 3.129 MB 2.388 MB 759.070 KB 76.31% 46,533   自由空間一直徘徊在 760KB左右?可是我點擊圖片操作的時候發現data object 中的data 數據是有變化的,停止操作的時候數據回回滾到原始數據這說明(1)說明圖片加載的時候只是一張一張加載的,只有點及圖片的時候,圖片纔會去佔用內存,停止操作之後GC內存被回收。。()

有另外一種可能drawable 是佔用很少的內存空間的。。。。。  查資料得知Drawable就是一個可畫的對象,其可能是一張位圖(BitmapDrawable),也可能是一個圖形(ShapeDrawable),。。。但是如果放到資源文件下面的應該就是佔用內存的。。。

 其實1,和2 是很容易驗證找個10MB圖片一次性加載進去。試試就知道了。可是我沒找到10MB的圖片。等明天搜到了圖片我會驗證的。。。

,沒找到10MB 的圖片,但是問題不能不搞啊,我們知道BItMap圖片是很佔用內存的,一般的圖片出錯都是它造成的,所以我試了下使用Bitmap數組來構建gallery,依然沒有造成內存溢出。所以可以證明(1)說明圖片加載的時候只是一張一張加載的,只有點及圖片的時候,圖片纔會去佔用內存,停止操作之後GC內存被回收。。()

 

所以 圖片造成溢出 是因爲:把圖片放到內存之後,圖片一致沒有recycle 。當過多的圖片沒有recycle 之後圖片超過8mb就崩潰了。。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章