Discuz! BBS

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 107|回复: 1

mSharedPreferences这个变量在app卸载后重新安装后,不保留原值

[复制链接]

465

主题

640

帖子

3734

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
3734
发表于 2026-1-8 16:41:38 | 显示全部楼层 |阅读模式
结论:数据不会保留
应用卸载后重新安装,SharedPreferences 数据会被清除,不会保留。

数据存储位置
  1. /data/data/你的包名/shared_prefs/你的配置文件.xml
复制代码


当应用被卸载时,这个目录会被系统完全删除。

数据保留情况对比
存储方式        卸载后是否保留        备注
SharedPreferences        ❌ 不保留        存储在应用私有目录
SQLite数据库        ❌ 不保留        存储在应用私有目录
内部存储文件        ❌ 不保留        存储在应用私有目录
外部存储文件        ⚠️ 可能保留        存储在公共目录(需权限)
AutoBackup (Google)        ⚠️ 可配置        需要用户开启云备份
如果需要保留数据
方案1:使用 AutoBackup(推荐)
在 AndroidManifest.xml 中配置:

  1. <application
  2.     android:fullBackupContent="@xml/backup_rules"
  3.     android:dataExtractionRules="@xml/data_extraction_rules">
复制代码
创建 res/xml/backup_rules.xml:
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <full-backup-content>
  3.     <include domain="sharedpref" path="."/>
  4. </full-backup-content>
复制代码
方案2:使用外部存储
  1. // 保存到外部存储(需要 WRITE_EXTERNAL_STORAGE 权限)
  2. val externalPrefs = getSharedPreferences("external_prefs", Context.MODE_PRIVATE)
复制代码
方案3:使用云端服务器
  1. // 将用户选择同步到服务器
  2. RetrofitClient.api.savePrivacyStatus(userId, true)
复制代码


针对您隐私协议场景的建议
如果希望记住用户的选择,可以使用:

AutoBackup - 最简单,用户卸载重装后如果开启备份可恢复
服务器存储 - 最可靠,需要用户登录
跳过存储 - 每次都弹窗确认(用户体验稍差但最安全)
您目前是出于什么考虑想要保留用户的选择呢?我可以给您更具体的建议。


回复

使用道具 举报

465

主题

640

帖子

3734

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
3734
 楼主| 发表于 2026-1-8 16:47:48 | 显示全部楼层
mSharedPreferences  数据存储位置:/data/data/你的包名/shared_prefs/你的配置文件.xml   这里的“你的存储位置.xml”是在哪里定义的?

mSharedPreferences 对应的 XML 文件名是在 调用 getSharedPreferences() 方法时定义的。

文件名定义位置:
  1. // 定义文件名的地方
  2. mSharedPreferences = getSharedPreferences("app_prefs", Context.MODE_PRIVATE)
  3.                                            ↑
  4.                                        这里定义文件名
复制代码


实际存储路径示例
假设你的应用包名是 myapplication,调用:
  1. mSharedPreferences = getSharedPreferences("app_prefs", Context.MODE_PRIVATE)
复制代码

那么存储位置就是:
  1. /data/data/myapplication/shared_prefs/app_prefs.xml
复制代码


不同的定义方式
1. 自定义文件名
  1. // 对应文件:/data/data/你的包名/shared_prefs/my_custom_prefs.xml
  2. mSharedPreferences = getSharedPreferences("my_custom_prefs", Context.MODE_PRIVATE)
复制代码

2. Activity 专用(默认文件名)
  1. // 对应文件:/data/data/你的包名/shared_prefs/MainActivity.xml
  2. mSharedPreferences = getPreferences(Context.MODE_PRIVATE)
  3. // 等价于 getSharedPreferences("MainActivity", MODE_PRIVATE)
复制代码

3. 默认 SharedPreferences
  1. // 对应文件:/data/data/你的包名/shared_prefs/cn.unicoder.myapplication_preferences.xml
  2. PreferenceManager.getDefaultSharedPreferences(this)
复制代码

查看实际文件内容
你可以在 Android Studio 的 Device File Explorer 中查看:
  1. // 如果这样定义:
  2. mSharedPreferences = getSharedPreferences("privacy_settings", Context.MODE_PRIVATE)

  3. // 存储位置:
  4. // /data/data/cn.unicoder.myapplication/shared_prefs/privacy_settings.xml

  5. // 文件内容示例:
  6. <?xml version='1.0' encoding='utf-8' standalone='yes' ?>
  7. <map>
  8.     <boolean name="privacy_accepted" value="true" />
  9. </map>
复制代码

总结:XML 文件名就是你在 getSharedPreferences() 的第一个参数中指定的字符串,加上 .xml 后缀。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|DiscuzX

GMT+8, 2026-2-4 10:51 , Processed in 0.013223 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表