Activity 从协程启动时启动两次

Activity is launched twice when starting from Coroutine

我正在使用 SplashActivity,在我的应用程序上准备一些数据',然后重定向到我的 MainActivity。

我在协程中执行此操作,以使用一些数据库事务。

如果我从协程内部启动 MainActivity,它会启动两次(当按下“return”按钮时,它会关闭 MainActivity 并在后面显示第二个 MainActivity)。 如果我从协同程序外部启动 MainActivity,它会工作(按下“return”按钮时,它会关闭 MainActivity 和应用程序')

SplashActivity 的一个简单示例:

class SplashActivity : AppCompatActivity() {
    private lateinit var activityScope: CoroutineScope
    private lateinit var image: ImageView

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_splash)
        prepareApplication()
    }

    override fun onPause() {
        activityScope.cancel()
        super.onPause()
    }

    override fun onResume() {
        super.onResume()
        prepareApplication()
    }

    private fun prepareApplication() {
        activityScope = CoroutineScope(Dispatchers.Main)
        activityScope.launch {
            // This starts the MainActivity twice
            startActivity(Intent(this@SplashActivity, MainActivity::class.java))
            finish()
        }
        // This starts the MainActivity once
        // startActivity(Intent(this@SplashActivity, MainActivity::class.java))
        // finish()
    }
}

您知道为什么以及如何避免这种情况吗?

谢谢!

您正在从 onCreate 和 onResume 调用此函数,并且由于启动不会立即执行,所以 startActivity 调用都添加到主线程队列中。在第二种情况下,当你不使用启动时,它会立即执行,因此不会发生第二次调用。