2013-08-27 22 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

相关问题