如果应用程序类变量指向活动类变量,那么在活动被破坏后,是否会有内存泄漏



在我的 Application类中有一个arraylist,还有一个 Activity,在初始化此arraylist之后,我现在也创建了一个arraylist。

现在,我正在考虑,当此活动将获得destroyed(用户按下按钮)时,我认为Activity类ArrayList内存必须发布,但是因为App class class 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;

当此活动将被破坏时(用户按下按钮),所以我认为活动类ArrayList内存必须发布

在Java&mdash;和其他语言使用垃圾收集&mdash;最接近"发布"的东西是"没有更多指向它的参考"。

在这种情况下,ArrayList仍然具有指向它的引用:Application中的contacts字段。因此,ArrayList不能收集垃圾。

现在是否存在内存泄漏?

ArrayList<String>无法造成垃圾收集,因为您将始终对其进行引用。

但是,我们倾向于保留"泄漏"一词的记忆使用情况的情况:

  • 您不打算无限期保留参考
  • 您一直在列表中添加更多对象,因此您的内存使用情况无限期增长
  • 等。

这是否完全取决于这是否是预期的行为(例如,您将此ArrayList<String>用作从应用程序外部获得的数据缓存,例如来自磁盘或网络)。

最新更新