为什么android在完成活动后不清理内存?

Din*_*dha 5 java android memory-management android-memory android-glide

就我而言,我有两个名为 A(主要活动)和 B(子活动)的活动。A 将启动 B(B 使用 Glide 图像库加载一些图像)。

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

在此处输入图片说明

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

这是正常的安卓行为吗?

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

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

在活动 B

    @Override
    protected void onDestroy() {
       super.onDestroy();
       System.gc();
    }
Run Code Online (Sandbox Code Playgroud)

Fro*_*ire 0

1) OnDestroy当被调用时被调用finish();,简单地按后退按钮不会调用此方法,除非你对其进行编程来这样做。

2) System.gc();在 onDestroy 中不起作用,因为您的activity B仍然处于活动状态onDestroyactivity B一旦完全终止,您应该从其他活动调用此方法。

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

注意:调用System.gc();并不是简单地释放内存,根据情况,它可能不会执行GC。请参阅此处的详细信息:为什么调用 System.gc() 是不好的做法?