Android M 奇怪的共享偏好问题
Posted
技术标签:
【中文标题】Android M 奇怪的共享偏好问题【英文标题】:Android M weird shared preferences issue 【发布时间】:2015-11-07 17:42:32 【问题描述】:在我运行 android M Developer Preview 2 的 Nexus 5 上,当卸载/重新安装应用程序时,设备正在检索我很久以前存储的共享首选项,例如布尔值 isFirstLaunch
。
清除这些的唯一方法是从设备设置中手动进行。
Android M 上的共享偏好行为是否有任何变化?我找不到任何关于此的文档。
或者 Android M Preview 2 ROM 可能有错误...
【问题讨论】:
我无法在运行 MNC v2 的 Nexus 5 上重现此行为。卸载应用程序(无论是通过从主屏幕启动器拖放还是gradle uninstallDebug
)并重新安装应用程序(无论是通过Android Studio 还是gradle installDebug
)都会清除任何现有的偏好数据。如果您有机会并且可以写出重现此内容的确切步骤,我会很感兴趣 - 谢谢!
我意识到我在清单中有 android:allowBackup
参数到 true
。显然,在最新版本的 Android Studio/build tools 上,它会自动添加到清单中。如果您将其设置为false
,问题就会消失,如我对已接受答案的评论所示。希望这会有所帮助!
我花了几个小时来解决这个问题,因为应用程序恢复了他们的旧数据。我得到了奇怪的结果。
【参考方案1】:
即使上面已经回答了这个问题,也没有提到卸载应用程序后避免自动备份的实际解决方案。
按照官方的说法,doc 说要避免自动备份需要在应用程序标签下的 Manifest 文件中执行<application android:allowBackup="false">
。:
启用和禁用备份 面向 Android 6.0(API 级别 23)或更高版本的应用会自动参与自动备份,因为
android:allowBackup
属性默认为 true。为避免混淆,您应该在清单中明确设置属性,如下所示:
<manifest ... >
...
<application android:allowBackup="false" ... >
...
</application>
</manifest>
如果您的应用可以通过其他机制重新创建其状态,或者当您的应用处理不应备份的敏感信息时,您可能希望通过将此设置为 false 来禁用备份
【讨论】:
必须设置。 android:allowBackup="false" 不是 "true" 是的@famfamfam,你是对的,更新了答案。【参考方案2】:这是因为 Android M 将提供 Automatic Backups(old 链接)。
摘录:
自动备份功能可将您的应用创建的数据保存在 用户设备通过将其上传到用户的 Google Drive 帐户和 加密它。您或用户不收取数据存储费用 并且保存的数据不计入用户的个人云端硬盘 配额。在 M Preview 期间,用户最多可以存储 25MB 安卓应用。
【讨论】:
感谢您的回答!我将android:allowBackup
清单属性设置为false,同时我想出了如何正确使用备份功能。
我也遇到过这个问题。当 android:allowBackup 为 false 时没关系。您找到其他解决方案了吗?
Google 破坏了链接,我想现在可以在这里找到:developer.android.com/guide/topics/data/autobackup.html【参考方案3】:
打开设置->备份和重置->自动恢复->关闭 如果打开则应用缓存和数据库将被恢复。
【讨论】:
以上是关于Android M 奇怪的共享偏好问题的主要内容,如果未能解决你的问题,请参考以下文章
在使用 Android 2.2 的 HTC Desire 上使用 Android MediaPlayer 进行流式传输时的奇怪行为