我正在使用dagger2
+ retrofit
+ coroutines
+ firebaseRemoteConfig
每次在Firebase控制台中更改远程配置时,我都无法更新totoName
。问题是我使用协程...您能帮我吗?谢谢
@Provides
@Singleton
@Named("toto")
suspend fun provideToto(remoteConfig: FirebaseRemoteConfig): String {
var totoName = fetchToto(remoteConfig)
return totoName
}
suspend fun fetchToto(remoteConfig: FirebaseRemoteConfig): String {
var totoName = remoteConfig.getString("toto_name")
withContext(Dispatchers.IO) {
remoteConfig.fetchAndActivate().addOnCompleteListener { task ->
totoName = remoteConfig.getString("toto_name")
}
}
return totoName
}
答案 0 :(得分:1)
我不确定Dagger本身是否配置为可与悬架一起使用。匕首通过。首先,它要求对象,如果对象尚未准备就绪,则要求创建对象。没有任何等待暂停完成的内置功能。此外,匕首对象是延迟初始化的Singleton,因此您只能得到自己创建的对象。因此,您已经节省了内存。 plus firebase在应用程序级别进行了初始化(预加载)。因此,您始终准备使用Firebase实例。因此无需暂停创建。
答案 1 :(得分:0)
那当然不行。首先,如果您使用@Singleton
,则整个应用程序只能填写一个fetch()
。
接下来,我不太确定你是否可以用匕首来做到这一点。您的方法应位于相应的类中,而不应位于某些依赖关系图上。