SavedStateHandle数据磁盘存储位置、方式、安全性及安卓版本影响问询
SavedStateHandle 持久化机制相关问题解答 存储位置与存储方式
- 底层存储位置:
SavedStateHandle承载的所有数据最终会被写入Activity/Fragment对应的onSaveInstanceStateBundle 中,由系统服务ActivityManagerService序列化后存储到系统专属的状态保存目录,具体路径为/data/system_ce/[当前用户ID]/saved_state/[应用包名]/,该目录归系统进程所有,普通应用无直接访问权限。 - 存储逻辑:数据以键值对形式存储在
SavedStateHandle内部的 Bundle 结构中,应用进程被系统回收前,系统会自动将该 Bundle 序列化为二进制流写入上述系统目录;当对应页面重建时,系统会将存储的二进制流反序列化为 Bundle,回传给SavedStateHandle恢复数据。
持久化机制安全性
- 默认安全等级:Android 7.0 及以上版本默认开启文件级加密,该系统存储目录下的所有数据受系统级加密保护,无Root权限的第三方应用无法读取对应内容。
- 存在的风险点:
- 该存储机制本身没有额外的应用层加密逻辑,若设备被Root,攻击者可直接获取序列化后的二进制文件,反序列化得到明文数据
- 若用户开启了系统自动备份功能,SavedStateHandle 的数据会被纳入备份范围,上传到对应厂商的云备份服务,这部分数据的安全性由备份服务的安全策略决定,应用侧无法直接控制
系统版本、编译版本、目标版本的影响
- 设备系统版本:Android 6.0 及以下版本未默认开启全盘/文件级加密,存储的状态数据被暴力破解的风险远高于高版本系统;Android 10 之后系统对状态保存目录做了更严格的权限隔离,进一步降低了未Root设备下的数据泄露风险。
- 编译版本/目标版本:只要使用的是稳定版 AndroidX SavedState 组件,编译版本和目标版本不会改变核心存储逻辑与存储位置;仅高版本的Android编译工具会新增Bundle序列化校验逻辑,避免存储数据超过Binder 1MB传输上限,不会影响数据安全性与存储路径。
内容的提问来源于stack exchange,提问作者Erik
相关产品推荐
相关产品推荐

