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 奇怪的共享偏好问题的主要内容,如果未能解决你的问题,请参考以下文章

我想以共享偏好保存,但应用程序崩溃

共享偏好“限制”

使用后退按钮退出应用程序后,我只能从共享偏好中获取值

关闭xamarin后保存android应用字符串值

在使用 Android 2.2 的 HTC Desire 上使用 Android MediaPlayer 进行流式传输时的奇怪行为

Android 和 Web App 共享 Kotlin 代码