Android AlertDialog 多次显示和关闭时会泄漏内存吗?

标签 android memory memory-leaks android-alertdialog

我有一个简单的 Activity ,只有一个按钮来弹出一个简单的对话框。代码是:

1。 MainActivity.java

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    public void showDialogBlank(View dumbView) {
        AlertDialog.Builder dlgBuilder = new AlertDialog.Builder(this);
        dlgBuilder.setTitle("TEST-TITLE")
                .create()
                .show();
    }
}

2。 Activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <Button
        android:id="@+id/btnShowDialogBlank"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:onClick="showDialogBlank"
        android:text="btn-blank" />

</LinearLayout>

多次点击按钮和空白区域后,内存如下: enter image description here

主要是Native内存增长了~3.6MB,无法进行GC...这是为什么?

最佳答案

没有内存泄漏!

是的,当您显示对话框时,内存使用量会增加,因为它需要内存来创建实例并将实例呈现给用户。

当 Android 显示对话框时,会调用一些 native 函数来将对话框绘制到屏幕上。

但是当您关闭对话框时,Android 也会清除所有 native 缓存。

系统假设当您显示一个对话框后,您可能想在之后显示另一个对话框。它将为此缓存一些 native 实例。这样系统下次就能更快地显示对话框。

当需要内存时,Android 会清除此缓存,但系统应该在有足够内存时执行此操作。

关于Android AlertDialog 多次显示和关闭时会泄漏内存吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63635480/

相关文章:

java - 使用 Firebase 和 Android 的通知

android - 使用 OkHttp + Spring 的多部分文件上传

c - 在 C 函数中分配内存

java - Android OneBusAway - 如何更改颜色?

Android HTTP GET 不起作用

c# - 我应该用 C/C++ 重写我的 DSP 例程,还是我擅长使用 C# 不安全指针?

c++ - 我们需要为 gcnew 创建指针验证吗

javascript - 由 <canvas/> 内存在页面重新加载时免费分配

java - 如何处理外部库的内存泄漏

java - 让与服务器的连接始终打开