You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Firebase Auth登录判断异常:if-else双分支均执行问题求助

已登录状态下MainActivity同时执行跳转和加载Fragment的问题排查与修复

问题场景

在MainActivity中实现会话管理逻辑:若用户已登录则跳转至HomeActivity,未登录则加载EmailSignInFragment。但用户处于登录状态时,if与else分支的代码均被执行,既完成了页面跳转,又加载了登录Fragment。

原代码

class MainActivity : AppCompatActivity() {
private lateinit var mAuth: FirebaseAuth


override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)
    mAuth = FirebaseAuth.getInstance()

    val currentUser = mAuth.currentUser
    if (currentUser != null) {
        val intent = Intent(this@MainActivity, HomeActivity::class.java)
        startActivity(intent)
    } else{
        val signIn = EmailSignIn()
        supportFragmentManager.beginTransaction().apply {
            replace(R.id.logFragment, signIn)
            commit()
        }
    }
}

问题原因

  • 调用startActivity()后,MainActivity的onCreate()方法不会立即终止,代码会继续执行后续逻辑。
  • Fragment事务的commit()是异步操作,即使已经发起页面跳转,该事务仍会被系统调度执行,最终导致登录Fragment被加载。

修复方案

在startActivity()后立即调用finish(),终止MainActivity的生命周期,这样后续的else分支代码就不会被执行:

class MainActivity : AppCompatActivity() {
private lateinit var mAuth: FirebaseAuth


override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)
    mAuth = FirebaseAuth.getInstance()

    val currentUser = mAuth.currentUser
    if (currentUser != null) {
        val intent = Intent(this@MainActivity, HomeActivity::class.java)
        startActivity(intent)
        finish() // 终止当前Activity,阻断后续代码执行
    } else{
        val signIn = EmailSignIn()
        supportFragmentManager.beginTransaction().apply {
            replace(R.id.logFragment, signIn)
            commit()
        }
    }
}

额外提示

  • finish()同时会让用户无法通过返回键回到MainActivity,符合登录后无需退回登录页的常规需求。
  • 若遇到屏幕旋转等配置变化导致Activity重建的情况,可将登录状态判断逻辑移至onStart(),或使用ViewModel持久化状态,避免重复触发跳转或Fragment加载。

内容的提问来源于stack exchange,提问作者Lakshay Kadam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 15:23:23