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 可以 initialize
或 setup
那些其他 class。这将创建关注点分离。
另一种方法是使用 Dagger2,这是一个依赖注入框架,可以将您的套接字引用注入到您想要的任何位置。
Dagger 2 has a steep learning curve and but a very important tool to learn as an Android developer
我为我的应用程序创建了一个自定义应用程序 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 上的人对此进行了广泛的讨论。看看
尽管根据第一个 link 中的讨论,这似乎是一种在应用程序 class 中存储上下文的好方法,但可以有更好的方法来处理这个问题。
理想情况下,对于每个逻辑单元,您应该有一个单独的 class 来处理它,而不是污染您的应用程序 class。但是,您的申请 class 可以 initialize
或 setup
那些其他 class。这将创建关注点分离。
另一种方法是使用 Dagger2,这是一个依赖注入框架,可以将您的套接字引用注入到您想要的任何位置。
Dagger 2 has a steep learning curve and but a very important tool to learn as an Android developer