Kotlin Android - 创建使用上下文而没有内存泄漏的单例

Roy*_*son 2 singleton android android-context kotlin

我正在尝试实现以下单例模式: SingletonClass.getInstance(context).callMethod()

虽然有很多教程可以解释如何在Kotlin中制作单例,但它们都没有解决context在静态字段中持有一个会导致Android内存泄漏的事实.

如何在不创建内存泄漏的情况下创建上述模式?

更新:

这是我对CommonsWare解决方案#2的实现.我用过Koin.

单身人士课程:

class  NetworkUtils(val context: Context) {

}
Run Code Online (Sandbox Code Playgroud)

申请类别:

class MyApplication : Application() {

    val appModule = module {
        single { NetworkUtils(androidContext()) }
    }

    override fun onCreate() {
        super.onCreate()
        startKoin(this, listOf(appModule))
    }
}
Run Code Online (Sandbox Code Playgroud)

活动类:

class MainActivity : AppCompatActivity() {

    val networkUtils : NetworkUtils by inject()

}
Run Code Online (Sandbox Code Playgroud)

Com*_*are 8

选项#1:getInstance(Context)打电话applicationContext给提供Context并保持.在Application你的进程和生活的过程的生活产生单.它是预先泄露的; 你不能进一步泄漏它.

选项#2:摆脱getInstance()并设置某种形式的依赖注入(Dagger 2,Koin等).这些DI框架有一些配方可以让它们Application为它们创建和注入下游的单体提供单例.