对话框内存泄漏或顽固的GC?

时间:2011-11-25 15:44:20

标签: android

当我加载我的应用程序时,需要大约3Mb的RAM。我的第一个活动上有ImageButton,它调用函数showRecords,显示一个对话框。

打开对话框后,可以通过单击框外部(将调用dismiss()方法)来关闭该对话框。我遇到的问题是,关闭对话框之后,我的应用程序使用的RAM量不会恢复到之前的状态(如果我在对话框中包含其他内容,它可以保持在Mb以上 - 但示例保留2-300kb左右)

 public void showRecords(View v){    
    Dialog recordDialog = new Dialog(this);
    recordDialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
    recordDialog.setCanceledOnTouchOutside(true);
    recordDialog.setContentView(R.layout.record);
    recordDialog.show();
}

record.xml文件有一个图像背景,另一个带有图片的ImageView。

我尝试过使用MAT,并且在内存中看不到Dialog对象。我也一直在使用DDMS来执行垃圾收集,但RAM值永远不会恢复到我期望的状态。

是否有与活动绑定的内容?或者GC只是拒绝回收内存?

由于这是我的第一个活动,它始终保持活动状态,如果我需要更多堆空间(由于某种原因)似乎没有关闭。因此,我非常有兴趣在不需要时回收Mb内存。

编辑 - record.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@drawable/background"
    android:orientation="vertical"         
    >

    <ImageView 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/recordspage"
        android:layout_marginTop="5dp"
        android:layout_gravity="center_horizontal"
        android:layout_marginLeft="10dp"
        android:layout_marginRight="10dp"
        />

</LinearLayout>

1 个答案:

答案 0 :(得分:1)

好的,既然分析已经不在了......: - )

位图资源占用了大量的堆空间,因为在内存中它们以原始的未压缩格式保存,与您可能开始使用的PNG或JPEG相比。

我注意到您正在设置LinearLayout的背景。这肯定有效,但位图背景可能是最大的内存生猪,仅仅是因为它们的大小。如果您担心空间,可以考虑使用平面颜色,ShapeDrawable或堆密集程度较低的东西。对于一个对话框尤其如此,该对话框通常只在屏幕上显示。