在我的情况下,我有两项名为A(主要活动)和B(儿童活动)的活动。 A将启动B(B使用Glide图像库进行一些图像加载)。
如果我使用android内存监视器获得内存分配,我可以清楚地看到内存分配增长。这是完全正常的,因为我们在活动中做了一些与图像相关的事情B.Image Attached。
所以我的问题是如果我按下活动B中的按钮它将进入活动A并且分配的内存将不会被清除。内存分配仍将保持相同的数量。
这是正常的Android行为吗?
如果不能如何手动清理内存?
我按如下方式手动运行GC,但同样结果没有运气:(。
在活动B中
@Override
protected void onDestroy() {
super.onDestroy();
System.gc();
}
答案 0 :(得分:0)
1) OnDestroy
在调用finish();
时被调用,只需按下后退按钮就不会调用此方法,除非您对其进行编程。
2) System.gc();
无效,因为activity B
仍然在onDestroy
处于有效状态。 <{1}}完全终止后,您应该从其他活动中调用此内容。
3)如果将活动上下文泄漏到长期存在的对象/线程/等,则即使activity B
被调用,活动仍将保留在内存中。 (内存泄漏)
注意:调用onDestroy
并不是简单地释放内存,它可能不会根据情况执行GC。详情请见Why is it bad practice to call System.gc()?