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)
1) OnDestroy当被调用时被调用finish();,简单地按后退按钮不会调用此方法,除非你对其进行编程来这样做。
2) System.gc();在 onDestroy 中不起作用,因为您的activity B仍然处于活动状态onDestroy。activity B一旦完全终止,您应该从其他活动调用此方法。
3)如果您将活动onDestroy上下文泄漏到长期存在的对象/线程/等,即使被调用,活动也将保留在内存中。(内存泄漏)
注意:调用System.gc();并不是简单地释放内存,根据情况,它可能不会执行GC。请参阅此处的详细信息:为什么调用 System.gc() 是不好的做法?