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

Android 11设备切换应用时Activity被销毁、切回后数据丢失问题求助

根因定位

这个问题本质是Android 11及以上系统的进程回收策略导致的,你的应用切后台后被系统主动杀死,切回时触发冷启动,所以出现数据全丢、回到启动Activity的现象,真机厂商定制ROM的后台限制比原生模拟器严格很多,所以只会在真机复现,调试器断开也是因为应用进程被销毁导致的。

你之前的方案失效原因
  • OnSaveInstanceState仅用于存储单个Activity的临时状态,无法保留全局内存数据、单例、静态变量中的内容,进程被杀死后这些数据会全部丢失
  • 普通后台Service在Android 11以上优先级极低,系统清理后台进程时会优先杀死携带后台Service的应用,无法实现保活效果
  • 系统通用省电开关关闭不生效,是因为小米、华为、OPPO等厂商的定制ROM有独立的后台进程管理规则,不在通用省电设置中
修复步骤

1. 确认进程被杀场景

在自定义Application类的onCreate方法中添加全局时间戳标记,验证切后台后进程是否被重启:

// 自定义Application类中添加
public static long APP_START_TIMESTAMP;

@Override
public void onCreate() {
    super.onCreate();
    APP_START_TIMESTAMP = System.currentTimeMillis();
    // 冷启动时从持久化存储恢复全量业务数据
    restoreGlobalData();
}

每次进入主页面时输出该时间戳,如果切后台再切回时间戳发生变化,即可确认是进程被系统回收重启。

2. 全量数据持久化

所有业务数据不要只存在内存的静态变量、单例类中,每次数据更新时同步写入SharedPreferences或Room数据库,应用冷启动时主动从持久化存储恢复所有全局数据,避免进程重启后数据丢失。

3. 调整后台保活逻辑

  • 把后台Service替换为前台Service,Android 11及以上需要先申请FOREGROUND_SERVICE权限,启动服务时调用startForeground()展示常驻通知,提升进程优先级
  • 引导用户将应用添加到厂商的后台运行白名单,开启允许自启动、允许后台活动、关闭电池优化例外的独立开关,避开厂商定制的后台清理规则

4. 页面状态恢复

在根Activity的onCreate方法中判断当前是否为进程重启场景,如果是则根据持久化存储的页面访问记录,直接恢复用户上次离开的页面,不要默认跳转到启动Activity。

调试方法

调试器断开是进程被杀的正常表现,你可以通过adb命令抓取系统日志确认进程被杀的具体原因:
adb logcat | grep "am_kill"
也可以打开模拟器开发者选项中的【不要保留活动】开关,即可在模拟器复现应用切后台就销毁的场景,方便调试。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 21:36:02