android - 对话框内存泄漏还是顽固的 GC?

标签 android

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

对话框打开后,可以通过在框外单击来关闭它(这将调用 dismiss() 方法)。我遇到的问题是,在对话框关闭后,我的应用程序使用的 RAM 量不会恢复到以前的状态(如果我在对话框中包含其他内容,它可以保持超过 1 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 值从未恢复到我期望的值。

Activity 是否有约束力?还是 GC 只是拒绝回收内存?

因为这是我的第一个 Activity ,所以它始终保持 Activity 状态,并且如果我需要更多堆空间(出于某种原因),它似乎不会关闭。因此,我对在不需要时回收 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>

最佳答案

好的,现在分析已经结束了......:-)

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

我注意到您正在为 LinearLayout 设置背景。这当然有效,但位图背景可能是最大的内存消耗,只是因为它们的大小。如果您担心空间不足,您可能会考虑使用纯色、ShapeDrawable 或堆占用较少的东西。对于对话框来说尤其如此,它通常只在屏幕上停留片刻。

关于android - 对话框内存泄漏还是顽固的 GC?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8271373/

相关文章:

android - FirebaseUser 图片到 ImageView

android - 如何为我的 ListView 实现适配器以显示 iPhone 联系人列表

android - Kotlin 中这个简单的 var 赋值有什么问题?

java - 数组中的数组 android

android - Android Gradle SourceSet资源不复制基本目录

android - 应用商店、大小限制等

android - 更改 ListView 的 ScrollBar/FastScroll 颜色?

Android:设备管理:从服务启动设备管理

服务器向客户端发送消息时android native Binder 崩溃

java - 我想获得该程序的最终版本,但遇到了这个错误