在我的例子中,我有两个名为 A(主要 Activity )和 B(子 Activity )的 Activity 。 A 将启动 B(B 使用 Glide 图像库加载一些图像)。
如果我使用 android 内存监视器获取内存分配,我可以清楚地看到内存分配增长。这完全没问题,因为我们正在 Activity B.Image Attached 中做一些与图像相关的事情。
所以我的问题是,如果我在 Activity B 中按下后退按钮,它将进入 Activity A,并且分配的内存不会被清除。内存分配量仍然相同。
这是正常的 android 行为吗?
如果不能,我该如何手动清理内存?
我手动运行 GC 如下,但同样的结果没有运气 :(。
在 Activity B中
@Override
protected void onDestroy() {
super.onDestroy();
System.gc();
}
最佳答案
1) OnDestroy
在 finish();
被调用时被调用,简单地按下后退按钮不会调用这个方法,除非你对其进行编程。
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/