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
调用都添加到主线程队列中。在第二种情况下,当你不使用启动时,它会立即执行,因此不会发生第二次调用。
我正在使用 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
调用都添加到主线程队列中。在第二种情况下,当你不使用启动时,它会立即执行,因此不会发生第二次调用。