You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何恢复application level变量?savedInstanceState仅支持Activity与Fragment场景

解决方案

针对你描述的*系统主动销毁应用进程(非用户手动杀死)*的场景,Android本身提供了原生的状态恢复机制,无需依赖SharedPreference或数据库即可实现Application级变量的恢复,常用方案如下:

方案1:通过Activity的onSaveInstanceState承载全局状态快照

系统在主动销毁应用进程前,一定会回调当前栈顶Activity的onSaveInstanceState(Bundle outState)方法,你可以在这个回调里将需要保留的Application级变量序列化后存入传入的Bundle对象:

// 栈顶Activity内的代码
override fun onSaveInstanceState(outState: Bundle) {
    super.onSaveInstanceState(outState)
    // 保存Application级变量到Bundle
    outState.putString("global_user_id", (application as MyApp).globalUserId)
    outState.putInt("global_unread_count", (application as MyApp).globalUnreadCount)
}

下次进程重建、Activity被重新初始化时,从onCreate的savedInstanceState参数中读取数据,重新赋值给Application的对应变量即可:

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    if (savedInstanceState != null) {
        // 恢复Application级变量
        (application as MyApp).globalUserId = savedInstanceState.getString("global_user_id")
        (application as MyApp).globalUnreadCount = savedInstanceState.getInt("global_unread_count")
    }
}

注意:该方案存储的总数据大小不要超过1MB,否则会触发TransactionTooLargeException。


方案2:使用Jetpack Saved State Module配合全局共享ViewModel

如果需要更简洁的封装,可以引入Jetpack的Saved State组件,将需要全局留存的状态存入带SavedStateHandle参数的全局共享ViewModel中:

  1. 首先引入依赖(build.gradle)
dependencies {
    implementation "androidx.lifecycle:lifecycle-viewmodel-savedstate:2.6.2"
}
  1. 定义全局共享ViewModel,内部使用SavedStateHolder保存状态
class GlobalViewModel(savedStateHandle: SavedStateHandle) : ViewModel() {
    // 从SavedStateHandle读写全局变量,系统杀进程时会自动持久化
    var globalUserId: String?
        get() = savedStateHandle["global_user_id"]
        set(value) {
            savedStateHandle["global_user_id"] = value
            // 同步赋值给Application变量
            (getApplication<MyApp>()).globalUserId = value
        }
}
  1. 进程重建后,直接从ViewModel中读取已自动恢复的状态,赋值给Application变量即可。

适配性说明

上述两种方案都仅覆盖系统因内存不足、配置变更等原因主动销毁进程的场景,用户手动从最近任务列表划掉应用时,系统会自动清空所有savedInstanceState相关的数据,刚好符合你“用户主动杀死应用无需恢复”的要求。


内容的提问来源于stack exchange,提问作者Elye

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 18:45:06