作者:篱边_水祭 | 来源:互联网 | 2022-11-19 17:26
我正在尝试实现以下单例模式: SingletonClass.getInstance(context).callMethod()
虽然有很多教程可以解释如何在Kotlin中制作单例,但它们都没有解决context
在静态字段中持有一个会导致Android内存泄漏的事实.
如何在不创建内存泄漏的情况下创建上述模式?
更新:
这是我对CommonsWare解决方案#2的实现.我用过Koin.
单身人士课程:
class NetworkUtils(val context: Context) {
}
申请类别:
class MyApplication : Application() {
val appModule = module {
single { NetworkUtils(androidContext()) }
}
override fun onCreate() {
super.onCreate()
startKoin(this, listOf(appModule))
}
}
活动类:
class MainActivity : AppCompatActivity() {
val networkUtils : NetworkUtils by inject()
}
CommonsWare..
8
选项#1:getInstance(Context)
打电话applicationContext
给提供Context
并保持.在Application
你的进程和生活的过程的生活产生单.它是预先泄露的; 你不能进一步泄漏它.
选项#2:摆脱getInstance()
并设置某种形式的依赖注入(Dagger 2,Koin等).这些DI框架有一些配方可以让它们Application
为它们创建和注入下游的单体提供单例.
1> CommonsWare..:
选项#1:getInstance(Context)
打电话applicationContext
给提供Context
并保持.在Application
你的进程和生活的过程的生活产生单.它是预先泄露的; 你不能进一步泄漏它.
选项#2:摆脱getInstance()
并设置某种形式的依赖注入(Dagger 2,Koin等).这些DI框架有一些配方可以让它们Application
为它们创建和注入下游的单体提供单例.