use*_*550 10 android android-jetpack android-jetpack-compose
我在状态和 Jetpack Compose的“活动或进程重新创建后恢复 UI 状态”部分中的代码示例中找不到savedInstanceState
代码示例中显示的函数,该部分显示“跨活动和进程重新创建保留状态”。
我确实找到了包含似乎是重命名或替换的androidx.compose.runtime.saveable
文档,并且其文档还说“......存储的值将在活动或流程重新创建后继续存在”。rememberSaveable
savedInstanceState
然而,当我在代码中使用它时,状态不会在后退按钮后继续存在,尽管它确实会在旋转中继续存在。这与文档所说的相反。
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")
}
}
}
}
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
Com*_*are 15
状态无法在后退按钮后继续存在
在该示例中,这是预期的行为。后退导航的默认行为是销毁 Activity。此时,已保存的实例状态将被丢弃。这并不是 Compose 所独有的,并且自 Android 1.0 以来一直是 Android 的固有行为。
这与文档所说的相反。
文档中使用的“进程终止”是指此流程:
届时,Android 将为您分叉一个新的进程,并尝试将您的 UI 恢复到用户离开您的应用程序之前的状态。保存的实例状态是该恢复的一部分。
归档时间: |
|
查看次数: |
11148 次 |
最近记录: |