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

时间:2015-11-20 19:16:50

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

在我的情况下,我有两项名为A(主要活动)和B(儿童活动)的活动。 A将启动B(B使用Glide图像库进行一些图像加载)。

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

enter image description here

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

这是正常的Android行为吗?

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

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

在活动B中

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

1 个答案:

答案 0 :(得分:0)

1) OnDestroy在调用finish();时被调用,只需按下后退按钮就不会调用此方法,除非您对其进行编程。

onDestroy中的

2) System.gc();无效,因为activity B仍然在onDestroy处于有效状态。 <{1}}完全终止后,您应该从其他活动中调用此内容。

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

注意:调用onDestroy并不是简单地释放内存,它可能不会根据情况执行GC。详情请见Why is it bad practice to call System.gc()?