making application class 单例会导致内存泄漏吗?

Will making application class singleton cause memory leak?

我为我的应用程序创建了一个自定义应用程序 class。这个class onCreate 像这样设置一个自身的静态变量

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

然后我使用 App.getInstance() 方法将应用程序上下文获取到 nonactivity/fragment class 之类的 API 控制器或其他东西。它会导致内存泄漏吗?

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

你问的这个问题很好,SO 上的人对此进行了广泛的讨论。看看 and this

尽管根据第一个 link 中的讨论,这似乎是一种在应用程序 class 中存储上下文的好方法,但可以有更好的方法来处理这个问题。

理想情况下,对于每个逻辑单元,您应该有一个单独的 class 来处理它,而不是污染您的应用程序 class。但是,您的申请 class 可以 initializesetup 那些其他 class。这将创建关注点分离。

另一种方法是使用 Dagger2,这是一个依赖注入框架,可以将您的套接字引用注入到您想要的任何位置。

Dagger 2 has a steep learning curve and but a very important tool to learn as an Android developer