Intereting Posts
Android 4: не может отклонить уведомление, проверив Android-виджет с ListView не загружает элементы соответствия Как начать новую деятельность с использованием ожидающего намерения Плагины, не работающие в Eclipse на Windows 7 64-разрядные Как скрыть имя приложения из строки заголовка в Android? Инкрементная сборка Android NDK Пример кинжала, построенный через eclipse, не выполняется: «Пожалуйста, убедитесь, что для этого модуля была запущена генерация кода». Android ActionBar: показывать / скрывать вкладки динамически? Добавить атрибут в теге «приложение» в AndroidManifest из плагина cordova Настройка прокси-сервера Firebase Какое намерение для настроек – использование данных Как я могу рассчитать хэш SHA-256 строки в Android? Что называется «переход» в документации на Android? Как удалить нижний разделитель нижнего колонтитула в списке андроидов Android: могу ли я создать представление / холст, который не является прямоугольным, но, например, круглый?

Что произойдет с SharedPreferences при обновлении приложения Android?

Я сохранил пользовательские настройки в SharedPreferences в моем приложении. Что произойдет с SharedPreferences при обновлении приложения через Google Play Store до новой версии приложения?

Будет ли SharedPrefernces по-прежнему присутствовать после обновления или они будут удалены?

До сих пор я не нашел ответа в Интернете или в Stackoverflow (могу ли я искать неверные ключевые слова?).

Можете ли вы указать мне на некоторые ссылки, которые они описывают этот процесс?

Редактировать: Между тем я нашел и другой ответ: поведение SharedPreferences при обновлении / удалении

Редактирование 2: со времени, прошедшего совсем немного, когда я впервые задал этот вопрос, я недавно узнал, что с Android 6.0 (API 23) также можно использовать функцию автоматического резервного копирования для защиты ваших общих настроек, как описано здесь Google . Просто добавьте allowBackup="true" в ваш файл AndroidManifest.xml .

Solutions Collecting From Web of "Что произойдет с SharedPreferences при обновлении приложения Android?"

Кристиан здесь говорит: ваши данные приложения остаются, когда пользователь устанавливает обновления.

Но это должно быть с тем же package name что и в качестве обновления предыдущего приложения.

EboMike в предупреждении Android-пользователя, что обновление приложения может привести к потере данных из старой версии приложения? говорит:

Честно говоря, потеря данных из-за обновления неприемлема.

Изменить :

Как правило , SharedPreferences (а также другие пользовательские данные) будут храниться во время процесса обновления, но иногда из-за некоторой « неизвестной » проблемы данные могут потеряться, и я думаю, что это не под вашим контролем. Таким образом, вы можете просто верить, что SharedPreferences будут сохранены ( см. Здесь ).

Поэтому, если вы хотите избежать очистки данных пользователя в процессе обновления, вам необходимо сохранить основные данные во внешнем хранилище (это может быть съемный носитель, например, SD-карта или внутреннее несъемное хранилище.), А не Для вашего приложения App.Or, по крайней мере, убрать для пользователя резервное копирование данных перед обновлением. Затем в первый запуск вашего (обновленного) приложения проверьте, есть ли файл резервной копии во внешнем хранилище или нет.

Если вам нравится знать, что должно / должно произойти при обновлении приложения? , У меня не было хорошего описания. Это сложный и относительный подход к Android Security , Application signing , copy protection и другим темам. Я имею в виду, что если вы измените состояние своего приложения в любых вышеприведенных полях, это приведет к другому результату.
Например, если вы CHANGED COPY PROTECTION FROM ON to OFF OR OFF to ON , ваше приложение будет обновлено, но все ваши общие настройки будут потеряны, доступ к файлам будет невозможным и ….
Вы, хотя и должны заботиться об условиях, заставляют ваше новое приложение being considered как обновление для предыдущего приложения (см. Вещи, которые не могут измениться ).

Также вы должны заботиться о своем коде, это может быть связано с удалением данных из ваших баз данных (см. Приложение обновления с предустановленным SQLite ).

Но в конечном счете, если будьте осторожны, вы можете сказать:

Процесс обновления заменяет только файл apk (и, следовательно, то, что в нем, например, drawables, …), и не изменяет базы данных, sharedpreferences и любые другие файлы, созданные во время выполнения (вероятно, в этом случае новое приложение установлено с UID, равный UID предыдущего приложения).

Вы можете увидеть эти страницы для получения более подробной информации:

Помогите!? Обновление нашего приложения на рынке удаляет сохраненные SharedPreferences.
Защита от копирования на рынке полностью прерывает доступ к файлам после обновления
Может ли кто-нибудь объяснить процесс обновления приложения?

Я думаю, что когда я обновил свое приложение в прошлый раз через Google Play, на sharedPreferences не повлияли.
Я использовал их для автоматического входа в систему, и после обновления он сделал это.
Это было месяц назад, моя память может стать нечеткой, поэтому лучше услышать мнение других людей.

После отладки более 4 часов я узнал, что я сохраняю модель как строку, сериализуя ее. Сериализуемый класс имеет уникальный идентификатор по имени serialVersionUID , который устанавливается по умолчанию во время выполнения, а id вычисляется по имени класса, интерфейсов и имен переменных. Я узнал, что изменил класс модели, добавил переменную, а затем обновил приложение. Поскольку класс теперь изменен, поэтому был установлен новый serialVersionUID и, следовательно, при обновлении он не смог десериализовать строку и создать модель и предоставлял java.io.InvalidClassException

Явно задаю serialVersionUID, чтобы избежать этой проблемы.

 static final long serialVersionUID = 42L;