gpt4 book ai didi

通过 rememberSaveable State 编写的 Android Jetpack Compose 无法在后退按钮中存活

转载 作者:行者123 更新时间:2023-12-04 12:34:03 25 4
gpt4 key购买 nike

我找不到 savedInstanceState Restore UI state after activity or process recreation 中的代码示例中显示的函数State and Jetpack Compose 的部分该部分说“在 Activity 和过程重新创建中保留状态”。
我确实找到了 androidx.compose.runtime.saveable documentation其中包含 rememberSaveable这似乎是 savedInstanceState 的重命名或替换并且它的文档还说“......存储的值(value)将在 Activity 或流程再造中幸存下来。”
但是,当我在我的代码中使用它时,状态不会在后退按钮中保留下来,尽管它会在旋转中保留下来。这与文档所说的相反。

package com.example.jetwatch

import android.os.Bundle
import androidx.activity.compose.setContent
import androidx.appcompat.app.AppCompatActivity
import androidx.compose.foundation.isSystemInDarkTheme
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
import androidx.compose.material.*
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.saveable.rememberSaveable
import androidx.compose.runtime.setValue

class MainActivity : AppCompatActivity() {
override fun onCreate(bundle: Bundle?) {
super.onCreate(bundle)
setContent {
MaterialTheme(colors = if (isSystemInDarkTheme()) darkColors() else lightColors()) {
Surface {
Column {
Row {
Column {
var m by rememberSaveable { mutableStateOf(0) }
Text("m = $m")
Button(onClick = { ++m }) {
Text("bump")
}
}
}
}
}
}
}
}
}

最佳答案

the state does not survive the back button


在该示例中,这是预期的行为。后退导航的默认行为是销毁 Activity 。保存的实例状态此时被丢弃。这不是 Compose 独有的,并且自 Android 1.0 以来一直是 Android 的常规行为。

That's contrary to what the documentation says.


文档中使用的“流程终止”是指此流程:
  • 用户在您的应用中
  • 用户切换到启动器(通过主页导航)或另一个应用程序(例如,通过概览屏幕)
  • 在接下来的几分钟内(但少于 30 分钟),Android 会在后台终止您的进程
  • 通过一种或另一种方式使用返回到您的应用程序

  • 届时,Android 将为您创建一个全新的流程,并尝试将您的 UI 恢复到用户离开您的应用程序之前的状态。保存的实例状态是该恢复的一部分。

    关于通过 rememberSaveable State 编写的 Android Jetpack Compose 无法在后退按钮中存活,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66424642/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com