在我的Application
类中有一个ArrayList,还有一个Activity
我在初始化这个ArrayList之后也创建了一个ArrayList,我将Application类ArrayList引用到这个活动类ArrayList 。
现在我正在考虑当这个活动将获得destroyed
(用户按下后退按钮),所以我认为活动类ArrayList内存必须被释放,但因为同样的内存也被App类ArrayList引用那么现在会有Memory Leak
或不是吗?
如果没有Memory Leak
那么请告诉我当我将活动/片段上下文存储在静态变量中时,会发生Memory Leak
,但为什么不在这里。
应用类代码
public class App extends MultiDexApplication {
ArrayList<String> contacts;
}
活动类代码
ArrayList<String> arr = new ArrayList<String>();
arr.add("123");
((App) getApplication()).contacts = arr; // Here I am refrencing arr to contacts;
答案 0 :(得分:1)
当此活动被销毁时(用户按下后退按钮),所以我认为活动类ArrayList内存必须释放
在Java中 - 和其他使用垃圾收集的语言 - 最接近“发布”的是“没有更多的引用指向它”。
在这种情况下,ArrayList
仍然有一个指向它的引用:contacts
中的Application
字段。因此,ArrayList
不能被垃圾收集。
现在是否会出现内存泄漏?
没有办法让ArrayList<String>
被垃圾收集,因为你总是会引用它。
但是,对于内存使用不好的情况,我们倾向于保留“泄漏”一词:
这是否“泄漏”完全取决于这是否是预期的行为(例如,您使用此ArrayList<String>
作为从应用程序外部(例如从磁盘或网络)获取的数据的缓存)或不