fix(init): 解决Activity启动时序竞态问题
- 将finish()调用延迟到下一帧执行,避免与LaunchActivityItem事务竞态 - 修复"Activity client record must not be null"偶发崩溃问题 - 将goSampling方法改为suspend函数确保协程串行执行 - 保证startActivity在finish()之前完成,防止页面跳转失败
This commit is contained in:
@@ -93,7 +93,9 @@ class InitActivity : BaseActivity() {
|
||||
// 子设备:直接进入小屏专属页面,不走原有大屏业务流程
|
||||
if (GlobalData.deviceRole == DeviceRole.SLAVE) {
|
||||
startActivity<SlaveActivity>()
|
||||
finish()
|
||||
// 延迟到下一帧 finish,避免与 LaunchActivityItem 事务竞态导致
|
||||
// "Activity client record must not be null" 偶发崩溃
|
||||
window.decorView.post { finish() }
|
||||
return@launch
|
||||
}
|
||||
// 主设备:走原有路由逻辑
|
||||
@@ -110,28 +112,33 @@ class InitActivity : BaseActivity() {
|
||||
startActivity<HomeActivity>()
|
||||
}
|
||||
}
|
||||
finish()
|
||||
// 延迟到下一帧 finish,避免与 LaunchActivityItem 事务竞态导致
|
||||
// "Activity client record must not be null" 偶发崩溃
|
||||
window.decorView.post { finish() }
|
||||
}
|
||||
}
|
||||
|
||||
private fun goSampling() {
|
||||
lifecycleScope.launch {
|
||||
val slots = dbViewModel.loadSeasoningSlot()
|
||||
if (slots.isEmpty()) {
|
||||
// 无调料信息,打开采样历史列表页面,点击设置配置调料信息
|
||||
startActivity<SamplingModeActivity>()
|
||||
return@launch
|
||||
}
|
||||
val count = dbViewModel.countCookFood(cookMode = 1)
|
||||
if (count > 0) {
|
||||
// 有烹饪中数据,打开采样历史列表页面
|
||||
startActivity<SamplingModeActivity>()
|
||||
return@launch
|
||||
}
|
||||
// 无烹饪数据,打开新增采样页面
|
||||
startActivity<PrepareFoodActivity> {
|
||||
putExtra(PrepareFoodActivity.PAGE_FROM, PrepareFoodActivity.HOME)
|
||||
}
|
||||
/**
|
||||
* 采样模式启动路由:根据本地调料配置和烹饪中数据决定跳转目标
|
||||
* 改为 suspend 后由外层协程串行等待,保证 startActivity 早于 finish() 执行,
|
||||
* 避免内部再嵌一层 lifecycleScope.launch 导致 finish 抢跑、跳转失败
|
||||
*/
|
||||
private suspend fun goSampling() {
|
||||
val slots = dbViewModel.loadSeasoningSlot()
|
||||
if (slots.isEmpty()) {
|
||||
// 无调料信息,打开采样历史列表页面,点击设置配置调料信息
|
||||
startActivity<SamplingModeActivity>()
|
||||
return
|
||||
}
|
||||
val count = dbViewModel.countCookFood(cookMode = 1)
|
||||
if (count > 0) {
|
||||
// 有烹饪中数据,打开采样历史列表页面
|
||||
startActivity<SamplingModeActivity>()
|
||||
return
|
||||
}
|
||||
// 无烹饪数据,打开新增采样页面
|
||||
startActivity<PrepareFoodActivity> {
|
||||
putExtra(PrepareFoodActivity.PAGE_FROM, PrepareFoodActivity.HOME)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user