2013-08-27 52 views
0

我的應用程序有內存泄漏,而我使用的MAT後,我發現了兩個pictures.They是以下幾點: origin pics 尺寸:640 * 902,75.2kb爲什麼內存轉儲中的png pictrue是原始圖像的兩倍?

但在MAT:

Class Name       | Shallow Heap | Retained Heap | Percentage 
-------------------------------------------------------------------------------- 
android.graphics.Bitmap @ 0x41acff20|   40 |  9,625,656 |  18.76% 
-------------------------------------------------------------------------------- 

Type |Name   |Value 
------------------------------ 
int |mHeight  |1880 
int |mWidth  |1280 
------------------------------ 

Problem Suspect 2 
One instance of "android.graphics.Bitmap" loaded by "<system class loader>" occupies 9,625,656 (18.76%) bytes. The memory is accumulated in one instance of "byte[]" loaded by "<system class loader>". 
Problem Suspect 3 
One instance of "android.graphics.Bitmap" loaded by "<system class loader>" occupies 9,236,536 (18.00%) bytes. The memory is accumulated in one instance of "byte[]" loaded by "<system class loader>". 

我正在使用Samsung Galaxy SIII,4.04 sdk。

以XML:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:background="@drawable/main_menu_bg" 

我怎樣才能解決這個問題?保留堆太大!

+0

你好,我看到一些信息在MAT像android.graphics.Bitmap @ 0x41acff20。我在哪裏可以看到它是哪個圖像?如何查看它? –

+1

@ Maid786你可以看到這個問題。[_查看內存dump_中的bitmaps](http://stackoverflow.com/questions/12709603/mat-eclipse-memory-analyzer-how-to-view-bitmaps-from-memory-dump/12709604#12709604) – JasonW

回答

1

有兩件事情可以做:

  1. 由於這是背景圖片,嘗試降低圖像的質量。我不認爲這會影響視覺質量。

  2. 通常jpg圖像幾乎佔png圖像大小的一半。所以,可能是你可以用JPG替換你的PNG

  3. 有些方法可以在未使用時回收位圖。但我認爲就你的情況而言,這是一個背景圖片,並且在應用程序運行之前將一直需要。如果沒有,然後考慮使用回收利用圖像回收()api

+0

哦,謝謝:)你能告訴我,爲什麼內存轉儲中的png大小是原始映像的兩倍? – JasonW

+1

在應用程序中,png圖像被用作解碼位圖,從而增加其大小。作爲png(一種ecoding算法),它是一種編碼圖像。但要在應用程序中使用,我們需要將其解碼並用作位圖 – Sushil

+0

@JasonW是否解決了此問題? – Jas

相關問題