【问题标题】:Does creating singleton inside application class cause memory leak?在应用程序类中创建单例会导致内存泄漏吗?
【发布时间】:2020-07-30 04:34:41
【问题描述】:

我有一个Authenticator 类,它需要一个context 来使用SharedPreferences 完成一些任务。我在我的自定义应用程序类中创建了一个类的单例,这样我就不需要每次都传递上下文来创建我的Authenticator 的实例。这是正确的方法还是会导致内存泄漏或其他问题?

我的Application 班级:

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)

    }

    ...
    ....
}

在其他类上,我可以像这样访问单例:

Authenticator.INSTANCE

【问题讨论】:

    标签: android kotlin singleton android-context


    【解决方案1】:

    当像 Context,Activity,Application, ... 这样具有生命周期的对象被存储为静态或静态对象时,您应该注意在它们的生命周期结束时清除它们。如果这样做,存储它们应该没有任何问题。只需释放实例 生命周期结束。

    为了更清楚地说明,Activity's 生命周期以onDestroy 结束,您应该覆盖此函数并正确释放对其的访问权限。有关更多详细信息,您可以访问生命周期的 android 文档。 对于应用程序终止等情况,应用程序使用的所有内存都将被清理并且不会发生泄漏,因此您不必担心Application 类中的访问,例如保存全局应用程序上下文。

    【讨论】:

    • 感谢您的回答。但是应用程序类的生命周期何时结束?
    • 而我正在使用 Kotlin。我使用的是伴随对象而不是静态方法。
    • 关于你的第一个问题,我编辑了我的答案。对于第二条评论,它们背后的主要概念是相似的,并且应该跟踪引用,以便在它们被销毁时无法访问它们。
    猜你喜欢
    • 1970-01-01
    • 2014-08-26
    • 1970-01-01
    • 1970-01-01
    • 2012-10-18
    • 1970-01-01
    • 2012-11-04
    • 2021-03-23
    • 2021-09-25
    相关资源
    最近更新 更多