使应用程序类单例会导致内存泄漏吗?

时间:2019-06-19 05:46:10

标签: android memory-leaks leakcanary

我为我的应用创建了一个自定义Application类。此类的onCreate会像这样设置自身的静态变量

public void onCreate() {
  super.onCreate();
  mInstance = this;
}
public static ChattyApp getInstance() {
  return mInstance;
}

然后,我使用App.getInstance()方法将应用程序上下文获取到非活动/片段类,例如API Controller或其他内容。会导致内存泄漏吗?

我设置了泄漏金丝雀,它在Application类的实例变量上显示内存泄漏。此变量保留socket.io的套接字引用,以便我可以在应用程序中的任何位置使用它。

1 个答案:

答案 0 :(得分:1)

您已经提出了一个很好的问题,SO方面的人们对此进行了广泛的讨论。看看thisthis

尽管按照第一个链接中的讨论,这似乎是将Context存储在Application类中的一种好方法,但是可以有更好的方法来解决此问题。

理想地,对于每个逻辑单元,您应该有一个单独的类来处理它,而不是污染您的应用程序类。但是,您的应用程序类可以initializesetup这些其他类。这将产生关注点分离。

另一种方法是使用Dagger2(这是一个依赖项注入框架)将套接字引用注入到任何需要的地方。

  

Dagger 2具有陡峭的学习曲线,但作为学习Android开发人员却是非常重要的工具