在更新 Android 应用程序时,SharedPreferences 会发生什么变化?

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

共享首选项在更新后是否仍然存在或者将被删除?

到目前为止,我还没有在网上或 Stackoverflow 上找到答案。

你能给我一些他们描述这个过程的链接吗?

编辑: 与此同时,我还找到了另一个答案: 在更新/卸载时,SharedPreferences 的行为

编辑2: 当我第一次问这个问题的时候,已经过去了很长一段时间了,我最近了解到,自从 Android 6.0(API 23)以来,也可以使用自动备份功能来 商店你的共享首选项,如 谷歌一下所描述的。

只需在 AndroidManifest.xml文件中添加 <application android:allowBackup="true" ... >

41475 次浏览

I think when I updated my application last time via Google Play, the sharedPreferences were not affected.
I was using them to automatically log in, and after update it did so.
It was a month ago, my memory could get fuzzy so it is better to hear other people opinions too.

Cristian here says: your Application data will be remain when user install updates.

But it must be with the same package name to detect as an update of previous App.

EboMike in Warning Android user that app update could lead to losing data from old app version? says:

Quite frankly, losing data due to an upgrade is unacceptable.

Edit:

Normally, the SharedPreferences(as well as other user data) will be kept during the update process, but sometimes, due to some "unknown" problem, the data may get lost, and I guess it is out of your control. So, you can simply believe that the SharedPreferences will be kept(see here).

So,if you want to avoid clearing user's data in upgrading progress,you have to save main data in external storage(this can be a removable storage media,such as an SD card or an internal,non-removable, storage.) and not private for your App.Or at least put away for user to backup data before upgrading .Then in first run of your (upgraded) App,check that is there any backup file in external storage or no.

If you like to know What things must/can happen on upgrading an App?,I did not any good description for this.It is complicated and relative with Android Security,Application signing,copy protection and other topics.I mean that if you change state of your App in any above fields,it causes different result.
For example if you CHANGED COPY PROTECTION FROM ON to OFF OR OFF to ON,your App will be updated but causes all your shared preferences to get lost,file access be impossible and ... .
You although have to be care in about conditions cause your new App being considered as an update for previous App(see Things That Cannot Change).

Also you have to be care in about your code,it may be caused deleting data of your databases(see update app with preloaded SQLite).

But ultimately, if be careful,you can say:

The update process only replaces the apk file(and so what is in it for example drawables,...) and does not alter databases,sharedpreferences and any other files that generated in run time(probably in this case,new App is installed with the UID that is equal to UID of previous App).

You can see these pages for more details:

Help!? Updating our applicatoin on the market deletes the saved SharedPreferences.
Market copy protection totally breaks file access after updating
Can someone explain the App update process?

After debugging for over 4 hours i found out that i was saving a model as string by serializing it. A serializable class has a unique id by name serialVersionUID, which is set by default at runtime and the id is calculated by the name of class , interfaces and the variable names as well. I found out i changed the model class, added a variable and then updated the app. Since the class is now changed so a new serialVersionUID was set and hence on update , it wasn't able to deserialize the string and create the model and was giving java.io.InvalidClassException

Explicitly set serialVersionUID to avoid this issue

static final long serialVersionUID = 42L;