diff --git a/app/src/main/java/com/shuwei/dish/match/ui/InitActivity.kt b/app/src/main/java/com/shuwei/dish/match/ui/InitActivity.kt index f8e8a61..1eb0052 100644 --- a/app/src/main/java/com/shuwei/dish/match/ui/InitActivity.kt +++ b/app/src/main/java/com/shuwei/dish/match/ui/InitActivity.kt @@ -93,7 +93,9 @@ class InitActivity : BaseActivity() { // 子设备:直接进入小屏专属页面,不走原有大屏业务流程 if (GlobalData.deviceRole == DeviceRole.SLAVE) { startActivity() - finish() + // 延迟到下一帧 finish,避免与 LaunchActivityItem 事务竞态导致 + // "Activity client record must not be null" 偶发崩溃 + window.decorView.post { finish() } return@launch } // 主设备:走原有路由逻辑 @@ -110,28 +112,33 @@ class InitActivity : BaseActivity() { startActivity() } } - 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() - return@launch - } - val count = dbViewModel.countCookFood(cookMode = 1) - if (count > 0) { - // 有烹饪中数据,打开采样历史列表页面 - startActivity() - return@launch - } - // 无烹饪数据,打开新增采样页面 - startActivity { - putExtra(PrepareFoodActivity.PAGE_FROM, PrepareFoodActivity.HOME) - } + /** + * 采样模式启动路由:根据本地调料配置和烹饪中数据决定跳转目标 + * 改为 suspend 后由外层协程串行等待,保证 startActivity 早于 finish() 执行, + * 避免内部再嵌一层 lifecycleScope.launch 导致 finish 抢跑、跳转失败 + */ + private suspend fun goSampling() { + val slots = dbViewModel.loadSeasoningSlot() + if (slots.isEmpty()) { + // 无调料信息,打开采样历史列表页面,点击设置配置调料信息 + startActivity() + return + } + val count = dbViewModel.countCookFood(cookMode = 1) + if (count > 0) { + // 有烹饪中数据,打开采样历史列表页面 + startActivity() + return + } + // 无烹饪数据,打开新增采样页面 + startActivity { + putExtra(PrepareFoodActivity.PAGE_FROM, PrepareFoodActivity.HOME) } }