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) {
|
if (GlobalData.deviceRole == DeviceRole.SLAVE) {
|
||||||
startActivity<SlaveActivity>()
|
startActivity<SlaveActivity>()
|
||||||
finish()
|
// 延迟到下一帧 finish,避免与 LaunchActivityItem 事务竞态导致
|
||||||
|
// "Activity client record must not be null" 偶发崩溃
|
||||||
|
window.decorView.post { finish() }
|
||||||
return@launch
|
return@launch
|
||||||
}
|
}
|
||||||
// 主设备:走原有路由逻辑
|
// 主设备:走原有路由逻辑
|
||||||
@@ -110,30 +112,35 @@ class InitActivity : BaseActivity() {
|
|||||||
startActivity<HomeActivity>()
|
startActivity<HomeActivity>()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
finish()
|
// 延迟到下一帧 finish,避免与 LaunchActivityItem 事务竞态导致
|
||||||
|
// "Activity client record must not be null" 偶发崩溃
|
||||||
|
window.decorView.post { finish() }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun goSampling() {
|
/**
|
||||||
lifecycleScope.launch {
|
* 采样模式启动路由:根据本地调料配置和烹饪中数据决定跳转目标
|
||||||
|
* 改为 suspend 后由外层协程串行等待,保证 startActivity 早于 finish() 执行,
|
||||||
|
* 避免内部再嵌一层 lifecycleScope.launch 导致 finish 抢跑、跳转失败
|
||||||
|
*/
|
||||||
|
private suspend fun goSampling() {
|
||||||
val slots = dbViewModel.loadSeasoningSlot()
|
val slots = dbViewModel.loadSeasoningSlot()
|
||||||
if (slots.isEmpty()) {
|
if (slots.isEmpty()) {
|
||||||
// 无调料信息,打开采样历史列表页面,点击设置配置调料信息
|
// 无调料信息,打开采样历史列表页面,点击设置配置调料信息
|
||||||
startActivity<SamplingModeActivity>()
|
startActivity<SamplingModeActivity>()
|
||||||
return@launch
|
return
|
||||||
}
|
}
|
||||||
val count = dbViewModel.countCookFood(cookMode = 1)
|
val count = dbViewModel.countCookFood(cookMode = 1)
|
||||||
if (count > 0) {
|
if (count > 0) {
|
||||||
// 有烹饪中数据,打开采样历史列表页面
|
// 有烹饪中数据,打开采样历史列表页面
|
||||||
startActivity<SamplingModeActivity>()
|
startActivity<SamplingModeActivity>()
|
||||||
return@launch
|
return
|
||||||
}
|
}
|
||||||
// 无烹饪数据,打开新增采样页面
|
// 无烹饪数据,打开新增采样页面
|
||||||
startActivity<PrepareFoodActivity> {
|
startActivity<PrepareFoodActivity> {
|
||||||
putExtra(PrepareFoodActivity.PAGE_FROM, PrepareFoodActivity.HOME)
|
putExtra(PrepareFoodActivity.PAGE_FROM, PrepareFoodActivity.HOME)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
override fun onDestroy() {
|
override fun onDestroy() {
|
||||||
countdownHandler.removeCallbacksAndMessages(null)
|
countdownHandler.removeCallbacksAndMessages(null)
|
||||||
|
|||||||
Reference in New Issue
Block a user