关于更新Android应用程序的SharedPreferences将会发生什么?

我已将用户设置存储在我的应用程序的SharedPreferences中。 当我通过Google Play Store更新应用程序到新版本的应用程序时,SharedPreferences会发生什么?

SharedPrefernces在更新后还会在那里,还是会被删除?

到目前为止,我还没有findnetworking或Stackoverflow上的答案(我可以用错误的关键字search?)。

你能指出我描述这个过程的一些链接吗?

编辑:同时我也发现了其他答案: 更新/卸载时的SharedPreferences行为

编辑2:自从我第一次问这个问题之后,我经历了相当长的一段时间之后,我最近才了解到,自从Android 6.0(API 23)以后,还可以使用自动备份function来保护您的共享首选项。 只需在你的AndroidManifest.xml文件中添加allowBackup="true"

Cristian 在这里说:当用户安装更新时,你的应用程序数据将保持不变。

但必须使用相同的package name来检测以前的应用程序的更新。

EboMike在警告Android用户的应用程序更新可能导致丢失旧应用程序版本的数据? 说:

坦率地说,由于升级而丢失数据是不可接受的。

编辑

通常情况下 ,SharedPreferences(以及其他用户数据)将在更新过程中保留,但有时由于某些“ 未知 ”问题,数据可能会丢失,我想这是无法控制的。 所以,你可以简单地相信SharedPreferences将被保留( 见这里 )。

因此,如果要避免在升级过程中清除用户数据,则必须将主数据保存在外部存储器中(可以是可移动存储介质,如SD卡或内部不可移动存储器),而不是私人为你的App.Or至less放弃了用户备份数据之前升级。然后在您的(升级)应用程序的第一次运行,检查是否有任何备份文件在外部存储或没有。

如果你想知道升级应用程序必须/可能发生什么事情? ,我对此没有什么好的描述。它与Android SecurityApplication signingcopy protection等题目是复杂的,相对的。我的意思是说,如果你在上面的任何一个字段中改变你的应用程序的状态,会导致不同的结果。
例如,如果您将CHANGED COPY PROTECTION FROM ON to OFF OR OFF to ON ,您的应用程序将会更新,但会导致您的所有共享首选项丢失,无法访问文件…。
你虽然必须在条件的关心导致你的新的应用程序being considered以前的应用程序的更新(见事情不能改变 )。

此外,您必须谨慎对待您的代码,这可能会导致删除数据库的数据(请参阅预装SQLite的更新应用程序 )。

但最终,如果要小心,你可以说:

更新过程只会replaceapk文件(以及其中的内容,例如drawables,…),并不会更改运行时生成的数据库,sharedpreferences和其他文件(可能在这种情况下,与前一个App的UID相等的UID)。

你可以看到这些页面的更多细节:

帮帮我!? 在市场上更新我们的应用程序会删除已保存的SharedPreferences。
市场拷贝保护在更新后完全中断文件访问
有人可以解释应用程序更新过程?

我想,当我上次通过Google Play更新我的应用程序时,sharedPreferences不受影响。
我正在使用它们来自动login,更新后它这样做。
这是一个月前,我的记忆可能会模糊,所以最好也听到别人的意见。

经过4个多小时的debugging,我发现我是通过序列化的方式将string保存为string。 一个可序列化的类有一个名为serialVersionUID的唯一标识符,它在运行时默认设置,id也是通过类名,接口名和variables名来计算的。 我发现我改变了模型类,添加了一个variables,然后更新应用程序。 由于该类现在已经改变,所以新的serialVersionUID被设置,因此在更新,它不能反序列化string和创build模型,并给予java.io.InvalidClassException

显式设置serialVersionUID以避免此问题

 static final long serialVersionUID = 42L;