当我加载我的应用程序时,需要大约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>
答案 0 :(得分:1)
好的,既然分析已经不在了......: - )
位图资源占用了大量的堆空间,因为在内存中它们以原始的未压缩格式保存,与您可能开始使用的PNG或JPEG相比。
我注意到您正在设置LinearLayout
的背景。这肯定有效,但位图背景可能是最大的内存生猪,仅仅是因为它们的大小。如果您担心空间,可以考虑使用平面颜色,ShapeDrawable
或堆密集程度较低的东西。对于一个对话框尤其如此,该对话框通常只在屏幕上显示。