使用双Activity实现FirebaseUIAuth登录的退出异常问题咨询
老哥,我来帮你捋捋这个FirebaseUI退出登录后的跳转问题~结合你说的情况,大概率是退出逻辑没处理好栈的清理,或者页面恢复时没检查登录状态,给你几个针对性的解决思路:
退出登录时强制清空Activity栈
你现在退出后返回还停留在第二个Activity,很大可能是之前的Activity栈没清干净。调用Firebase的signOut()之后,启动主Activity的时候一定要加上清空栈的标记,这样就能彻底把之前的页面都移除,直接回到主页面。代码这么写:FirebaseAuth.getInstance().signOut(); Intent intent = new Intent(this, MainActivity.class); // 清空现有任务栈,创建新任务栈 intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent); finish(); // 结束当前的第二个Activity检查第二个Activity的启动模式
去你的AndroidManifest.xml里看看第二个Activity的launchMode属性,如果设成了singleTask或者singleInstance,系统会把它单独放在一个任务栈里,退出后返回时就容易停在这儿。改成默认的standard(或者根据业务需求调整,但别让它脱离正常栈逻辑)就好。后台恢复时自动检查登录状态
应用最小化再打开时,系统会恢复之前的Activity栈,这时候如果没及时检查用户是否已登录,就会出现异常。你可以在每个需要登录状态的Activity的onResume()方法里加个检查,一旦发现用户未登录,就自动跳转到主页面:@Override protected void onResume() { super.onResume(); FirebaseUser currentUser = FirebaseAuth.getInstance().getCurrentUser(); if (currentUser == null) { // 用户已退出,跳转主页面 Intent intent = new Intent(this, MainActivity.class); startActivity(intent); finish(); } }确认FirebaseUI登录回调的收尾处理
如果你是用startActivityForResult启动FirebaseUI的登录界面,退出后要确保没有残留的回调逻辑影响页面跳转。比如在登录成功的回调里,不要留着可能导致页面栈混乱的代码,保证每次登录/退出都是清晰的栈流程。
内容的提问来源于stack exchange,提问作者ijann

