【问题标题】:Why android does not clean up memory after finishing activity?为什么android在完成活动后不清理内存?
【发布时间】:2015-11-20 19:16:49
【问题描述】:

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

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

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

这是正常的安卓行为吗?

如果没有,我该如何手动清理内存?

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

在活动 B

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

【问题讨论】:

  • 据我所知,GC 只会在真正需要时运行(没有更多的堆空间),这没关系。否则,请确保绝对没有引用该内存(检查静态引用)并确保您清理了一些 Android 特定资源。
  • 你找到解决办法了吗?

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


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-16
    • 1970-01-01
    相关资源
    最近更新 更多