我在我的应用程序中使用 firebase 远程配置。使用此调用时,我遇到罕见的 IllegalStateException 崩溃(访问
remoteConfig
实例时发生崩溃):
Firebase.remoteConfig.fetchAndActivate().addOnCompleteListener { task ->
when (task.isSuccessful) {
true -> Log.d(APP_TAG, "Config params updated: ${task.result}")
false -> Log.e(APP_TAG, "Config params loading ERROR!")
}
}
这是堆栈跟踪:
Caused by java.lang.IllegalStateException:
at com.google.firebase.FirebaseApp.getInstance (FirebaseApp.java:179)
at com.google.firebase.remoteconfig.FirebaseRemoteConfig.getInstance (FirebaseRemoteConfig.java:81)
at com.google.firebase.remoteconfig.RemoteConfigKt.getRemoteConfig (RemoteConfig.kt:32)
at myapp.mypackage.FbRemoteConfig.fetchFreshValues (FbRemoteConfig.kt:83)
at android.app.ActivityThread.handleReceiver (ActivityThread.java:4981)
无法在我的设备上重现,但效果就像魅力一样,100 倍中的 100 倍,持续数天和数周。
但是,不知何故,它偶尔会在其他人的设备上崩溃,但可能只适用于约 1-2% 的用户。我无法指出原因。
我在谷歌上搜索的典型建议提到在应用程序类中调用
FirebaseApp.initializeApp(this)
,但这似乎不正确 - 它甚至没有在文档中提到,在任何教程中都没有提到,并且根据最新的 stackoverlow 帖子,没有必要2024 年不再初始化 Firebase 以使用远程配置。此外,它对我和绝大多数用户来说都很好......所以很可能事实并非如此。
但除此之外,我找不到任何东西......为什么我会得到这些神秘的、罕见的 IllegalStateException?
这是我的应用程序级别 build.gradle:
apply plugin: 'com.google.gms.google-services'
...
dependencies {
...
implementation(platform("com.google.firebase:firebase-bom:33.4.0"))
implementation("com.google.firebase:firebase-config")
implementation("com.google.firebase:firebase-analytics")
}
这是我的项目级别的buildgradle:
...
dependencies {
...
classpath 'com.google.gms:google-services:4.4.2'
}
更安全的可能解决方法是添加一个条件来检查您的 Activity 或片段是否还活着。如果您使用片段生命周期回调(例如 onAttach() 和 onDetach()),这一点尤其重要。