From c002640911b5a284eb473e777dc4281287882dfb Mon Sep 17 00:00:00 2001 From: hailin Date: Mon, 26 Jan 2026 05:32:43 -0800 Subject: [PATCH] =?UTF-8?q?fix(android):=20=E4=BF=AE=E5=A4=8D=E5=AF=BC?= =?UTF-8?q?=E5=87=BA=E5=A4=87=E4=BB=BD=E5=90=8E=E8=BF=94=E5=9B=9E=E5=90=AF?= =?UTF-8?q?=E5=8A=A8=E5=B1=8F=E5=B9=95=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 问题原因: - 当文件选择器 (ActivityResultContracts.CreateDocument) 启动时, Android 可能会销毁并重新创建 Activity(配置更改) - startupComplete、pendingExportJson、pendingExportAddress 使用 remember 存储状态,在 Activity 重建时会丢失 - startupComplete 重置为 false 导致显示启动检查屏幕 修复方案: - 将 startupComplete 从 remember 改为 rememberSaveable - 将 pendingExportJson 和 pendingExportAddress 从 remember 改为 rememberSaveable - rememberSaveable 会通过 Android 的 savedInstanceState 机制持久化状态 Co-Authored-By: Claude Opus 4.5 --- .../src/main/java/com/durian/tssparty/MainActivity.kt | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/backend/mpc-system/services/service-party-android/app/src/main/java/com/durian/tssparty/MainActivity.kt b/backend/mpc-system/services/service-party-android/app/src/main/java/com/durian/tssparty/MainActivity.kt index 3ac592fc..0512022f 100644 --- a/backend/mpc-system/services/service-party-android/app/src/main/java/com/durian/tssparty/MainActivity.kt +++ b/backend/mpc-system/services/service-party-android/app/src/main/java/com/durian/tssparty/MainActivity.kt @@ -13,6 +13,7 @@ import androidx.activity.result.contract.ActivityResultContracts import androidx.compose.foundation.layout.* import androidx.compose.material3.* import androidx.compose.runtime.* +import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext import androidx.hilt.navigation.compose.hiltViewModel @@ -114,8 +115,9 @@ fun TssPartyApp( // Export/Import file handling val context = LocalContext.current - var pendingExportJson by remember { mutableStateOf(null) } - var pendingExportAddress by remember { mutableStateOf(null) } + // Use rememberSaveable to persist across configuration changes (e.g., file picker activity) + var pendingExportJson by rememberSaveable { mutableStateOf(null) } + var pendingExportAddress by rememberSaveable { mutableStateOf(null) } // File picker for saving backup val createDocumentLauncher = rememberLauncherForActivityResult( @@ -180,7 +182,8 @@ fun TssPartyApp( } // Track if startup is complete - var startupComplete by remember { mutableStateOf(false) } + // Use rememberSaveable to persist across configuration changes (e.g., file picker activity) + var startupComplete by rememberSaveable { mutableStateOf(false) } // Handle success messages LaunchedEffect(uiState.successMessage) {