Dee*_*agi 1 android dependency-injection multi-module kotlin koin
您好,在多模块应用程序中,我正在使用 loadKoinModules() 加载子模块,并在功能模块中使用 unloadKoinModules() 卸载它,我的代码如下所示
class FeatureActivity:AppCompatActivity(){
private val loadFeatures by lazy { loadKoinModules(featureModule) }
private fun injectFeatures() = loadFeatures
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
injectFeatures()
}
override fun onDestroy() {
super.onDestroy()
unloadKoinModules(featureModule)
}
}
Run Code Online (Sandbox Code Playgroud)
一切正常,但当加载同一活动的另一个实例时,问题就开始了。当前活动处于后台。由于以下错误,应用程序崩溃
org.koin.error.BeanOverrideException: Try to override definition with Factory
Run Code Online (Sandbox Code Playgroud)
有没有办法避免这个错误
您正在做的事情在某种程度上是正确的,您可以在执行此操作时动态卸载,这就是unloadKoinModules添加链接的原因
但你为什么不卸载呢onStop?根据 android 生命周期和你想要做什么,你unload必须onStop
当活动获得焦点时onCreate会发生(并且您将加载模块),稍后当活动失去焦点时,onStop将会发生(并且您将卸载模块)以及事件之间的循环...
class FeatureActivity:AppCompatActivity(){
private val loadFeatures by lazy { loadKoinModules(featureModule) }
private fun injectFeatures() = loadFeatures
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
injectFeatures()
}
override fun onStop() {
super.onStop()
unloadKoinModules(featureModule)
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5835 次 |
| 最近记录: |