在应用程序 class 中创建单例是否会导致内存泄漏?
Does creating singleton inside application class cause memory leak?
我有一个 Authenticator
class,需要 context
才能用 SharedPreferences
完成一些任务。我在我的自定义应用程序 class 中创建了一个 class 的单例,这样我就不需要每次都传递上下文来创建我的 Authenticator
的实例。这是正确的方法还是会导致内存泄漏或其他问题?
我的 Application
class :
class App : Application() {
override fun onCreate() {
super.onCreate()
//Plant Timber for Logging in Debug Build
if (BuildConfig.DEBUG) {
Timber.plant(Timber.DebugTree())
}
Authenticator.createInstance(this)
}
...
....
}
在其他 classes 上,我可以像这样访问单例:
Authenticator.INSTANCE
当 Context
、Activity
、Application
、...等具有生命周期的对象存储为静态或静态对象时,您应该注意将它们作为生命周期清除结束。如果这样做,存储它们应该没有任何问题。只需在
生命周期结束。
为了进一步说明,Activity's
生命周期以 onDestroy
结束,您应该覆盖此函数并正确释放对它的访问。有关更多详细信息,您可以访问生命周期的 android 文档。
对于应用程序终止等情况,应用程序使用的所有内存都将被清理并且不会发生泄漏,因此您不必担心 Application
class 中的访问,例如保存全局应用程序上下文。
我有一个 Authenticator
class,需要 context
才能用 SharedPreferences
完成一些任务。我在我的自定义应用程序 class 中创建了一个 class 的单例,这样我就不需要每次都传递上下文来创建我的 Authenticator
的实例。这是正确的方法还是会导致内存泄漏或其他问题?
我的 Application
class :
class App : Application() {
override fun onCreate() {
super.onCreate()
//Plant Timber for Logging in Debug Build
if (BuildConfig.DEBUG) {
Timber.plant(Timber.DebugTree())
}
Authenticator.createInstance(this)
}
...
....
}
在其他 classes 上,我可以像这样访问单例:
Authenticator.INSTANCE
当 Context
、Activity
、Application
、...等具有生命周期的对象存储为静态或静态对象时,您应该注意将它们作为生命周期清除结束。如果这样做,存储它们应该没有任何问题。只需在
生命周期结束。
为了进一步说明,Activity's
生命周期以 onDestroy
结束,您应该覆盖此函数并正确释放对它的访问。有关更多详细信息,您可以访问生命周期的 android 文档。
对于应用程序终止等情况,应用程序使用的所有内存都将被清理并且不会发生泄漏,因此您不必担心 Application
class 中的访问,例如保存全局应用程序上下文。