渐进式编程课
Android 目录
第 18 课2026.09.24

在旋转保留之外,为系统终止进程后的轻量状态恢复提供同一个事实源。

第 18 课:让运行状态可在系统进程终止后恢复

  • 日期:2026-09-24
  • 课程序号:第 18 课
  • 知识点:SavedStateHandle.getMutableStateFlow

用途或适用场景

在旋转保留之外,为系统终止进程后的轻量状态恢复提供同一个事实源。

核心概念

getMutableStateFlow("running", false) 返回与 SavedStateHandle 同步的状态流;更新它时也更新可保存的键值。强制停止或移除任务不保证恢复。

最小代码或操作示例

kotlin
import androidx.lifecycle.SavedStateHandle
import androidx.lifecycle.ViewModel
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.asStateFlow
import kotlinx.coroutines.flow.update

class LessonViewModel(state: SavedStateHandle) : ViewModel() {
    private val _running = state.getMutableStateFlow("running", false)
    val running: StateFlow<Boolean> = _running.asStateFlow()
    fun toggle() { _running.update { current -> !current } }
}

第 17 课的 Activity 收集器与按钮监听器保持不变。

3~5 分钟练习

切换到运行状态后让应用进入后台,再用系统开发者选项模拟进程终止并返回。

参考答案

在系统保留任务栈并保存状态的条件下,running 恢复为 true,按钮显示“停止”;强制停止或移除任务不属于这一保证。实际结果仍需目标设备验证。

与上一课的联系

沿用第 17 课的 LessonViewModel、running、toggle() 与 Activity 收集器;本课只把 _running 的来源改为 SavedStateHandle 可变状态流;完成后下一课可比较配置变更与系统进程终止两条恢复路径。

时效校验

时效校验:2026-09-24(Android Developers Saved State module 与 SavedStateHandle API;getMutableStateFlow 需 AndroidX Lifecycle 2.9.0+,未见废弃标记;设备恢复行为未在本次验证)。

官方参考