我为我的应用程序创建了一个自定义应用程序类。此类 onCreate 像这样设置自身的静态变量
public void onCreate() {
super.onCreate();
mInstance = this;
}
public static ChattyApp getInstance() {
return mInstance;
}
然后我使用 App.getInstance()
方法将应用程序上下文获取到非 Activity/fragment 类(如 API Controller 或其他类)。它会导致内存泄漏吗?
我设置了 leak canary,它显示了 Application 类的实例变量上的内存泄漏。此变量保留 socket.io 的套接字引用,以便我可以在应用程序的任何位置使用它。
最佳答案
这是一个很好的问题,SO 上的人们对此进行了广泛的讨论。看看this和 this
虽然根据第一个链接中的讨论,这似乎是一种将 Context 存储在 Application 类中的好方法,但可以有更好的方法来处理这个问题。
理想情况下,对于每个逻辑单元,您应该有一个单独的类来处理它,而不是污染您的应用程序类。但是,您的应用程序类可以initialize
或setup
那些其他类。这将创建关注点分离。
另一种方法是使用 Dagger2 ,这是一个依赖项注入(inject)框架,可将您的套接字引用注入(inject)到您想要的任何位置。
Dagger 2 has a steep learning curve and but a very important tool to learn as an Android developer
关于android - 使应用程序类单例会导致内存泄漏吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56660758/