Android报错:Method addObserver必须在主线程调用,求排查方案
问题排查:Fragment初始化时主线程异常导致addObserver报错
错误日志
近期应用版本出现大量如下错误:
java.lang.IllegalStateException: Method addObserver must be called on the main thread androidx.lifecycle.LifecycleRegistry.enforceMainThreadIfNeeded(LifecycleRegistry.java:317) androidx.lifecycle.LifecycleRegistry.addObserver(LifecycleRegistry.java:172) androidx.fragment.app.Fragment.initLifecycle(Fragment.java:550) androidx.fragment.app.Fragment.<init>(Fragment.java:516) androidx.fragment.app.DialogFragment.<init>(DialogFragment.java:181) com.example.testing.biometric.BiometricDialogFragment.<init>(BiometricDialogFragment.kt:13) com.example.testing.biometric.BiometricDialogFragment$Companion.show(BiometricDialogFragment.kt:17)
问题场景
我无法在自己的Android 13设备上复现该问题,也不确定是否会导致应用崩溃。问题触发逻辑是:在另一个Fragment中调用生物验证接口,当验证失败回调返回BiometricFailure.FailOther时,会调用BiometricDialogFragment.show()方法展示弹窗。
相关代码片段
BiometricDialogFragment的伴生对象方法
companion object { fun show(fragmentManager: FragmentManager) { BiometricDialogFragment().show(fragmentManager, TAG) } }
调用处代码
private fun biometricLogin() { helper.getBiometricInfo(this, object : BiometricValidationCallback { override fun onSuccess(account: Account) { //handle success } override fun onFail(fail: BiometricFailure) { when (fail) { BiometricFailure.FailOther -> BiometricDialogFragment.show(childFragmentManager) else -> {} } } }) }
当前使用的AndroidX依赖版本
implementation "androidx.lifecycle:lifecycle-extensions:2.2.0" implementation "androidx.lifecycle:lifecycle-common-java8:2.2.0" implementation "android.arch.lifecycle:common-java8:1.1.1" implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.2.0" implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.2.0" implementation "androidx.lifecycle:lifecycle-reactivestreams:2.2.0" implementation "androidx.activity:activity:1.5.0" implementation "androidx.fragment:fragment-ktx:1.3.0-alpha06" implementation "androidx.activity:activity-ktx:1.5.0" implementation "androidx.biometric:biometric:1.0.1"
求助点
我查阅了多篇相关帖子但未找到可行方案,我们并未手动设置观察者却出现该错误,自身Android 13设备无法复现但其他Android 13用户会触发,请求帮忙排查问题根因。
内容的提问来源于stack exchange,提问作者KsiAndroid
相关产品推荐
相关产品推荐

