java - 为什么android在完成 Activity 后不清理内存?

标签 java android memory-management android-memory android-glide

在我的例子中,我有两个名为 A(主要 Activity )和 B(子 Activity )的 Activity 。 A 将启动 B(B 使用 Glide 图像库加载一些图像)。

如果我使用 android 内存监视器获取内存分配,我可以清楚地看到内存分配增长。这完全没问题,因为我们正在 Activity B.Image Attached 中做一些与图像相关的事情。

enter image description here

所以我的问题是,如果我在 Activity B 中按下后退按钮,它将进入 Activity A,并且分配的内存不会被清除。内存分配量仍然相同。

这是正常的 android 行为吗?

如果不能,我该如何手动清理内存?

我手动运行 GC 如下,但同样的结果没有运气 :(。

在 Activity B中

    @Override
    protected void onDestroy() {
       super.onDestroy();
       System.gc();
    }

最佳答案

1) OnDestroyfinish(); 被调用时被调用,简单地按下后退按钮不会调用这个方法,除非你对其进行编程。

2) onDestroy 中的 System.gc(); 将不起作用,因为您的 activity B 时仍处于 Activity 状态onDestroy。一旦 activity B 完全终止,您应该从其他 Activity 调用它。

3) 如果您将 Activity 上下文泄露给长期存在的对象/线程/等,即使调用 onDestroy Activity 也会保留在内存中。 (内存泄漏)

注意 调用System.gc(); 不会简单地释放内存,它可能不会执行 GC,具体视情况而定。在此处查看详细信息:Why is it bad practice to call System.gc()?

关于java - 为什么android在完成 Activity 后不清理内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33834404/

相关文章:

Java : Set addAll() vs adding using loop

java - 如何在运行时在 Android 中显示图像并将单选按钮作为列表中的单选组

android - 在 simpleAdapter 中为 textview 设置颜色

c - 如何在 C 中声明和使用包含 10 亿个整数的巨大数组?

java - 为什么Java不强制serialVersionUID

服务器上的 java readInt() 没有得到好的 int

android - 在 Android 中的 DCIM 文件夹下的 SD 卡上创建文件夹时出错

android - 无法以 asmack 开头

windows - 内存映射文件保留在物理内存中?

objective-c - XCode 堆快照非对象增加导致内存崩溃