Android应用执行用户认证时跳转LoginActivity崩溃如何解决?
问题触发原因
崩溃日志已经明确给出根因:触发了android.content.ActivityNotFoundException异常,系统提示找不到com.example.passiveincome.LoginActivity类。Android系统要求所有的Activity组件必须在项目的AndroidManifest.xml清单文件中注册后才能被正常启动,你已经完成了LoginActivity的代码编写,但没有在清单文件中做对应的声明,因此跳转时直接触发崩溃。
另外代码存在一处隐藏隐患:LoginActivity的onStart生命周期中注册了Firebase的登录状态监听,只要当前设备有已登录的账号,进入LoginActivity就会自动跳转至RegistrationActivity,如果RegistrationActivity也没有在清单文件中声明,会再次触发同类崩溃。
修复方案
1. 注册LoginActivity
打开项目路径下的app/src/main/AndroidManifest.xml文件,在<application>标签内部添加如下声明:
<activity android:name=".LoginActivity" android:exported="false" />
如果你的项目targetSdk版本≥31,且该页面需要被其他外部应用唤起,将android:exported属性值改为true即可。
2. 补充其他Activity的注册
检查你代码中用到的其他页面,尤其是RegistrationActivity,按照上述格式同步在清单文件中补充声明:
<activity android:name=".RegistrationActivity" android:exported="false" />
3. 可选优化(解决内存泄漏隐患)
你当前在LoginActivity的onStart中注册了AuthStateListener,但没有在页面销毁时解绑,会导致内存泄漏,可在LoginActivity中添加如下代码:
@Override protected void onStop() { super.onStop(); if (firebaseAuth != null && authStateListener != null) { firebaseAuth.removeAuthStateListener(authStateListener); } }
内容的提问来源于stack exchange,提问作者user16461665

