Что произойдет с SharedPreferences при обновлении приложения для Android?
Я сохранил настройки пользователя в SharedPreferences в моем приложении. Что произойдет с SharedPreferences, когда я обновлю приложение через Google Play Store до новой версии приложения?
Будут ли SharedPrefernces оставаться там после обновления или они будут удалены?
До сих пор я не нашел ответа в Интернете или Stackru (могу ли я искать с неправильными ключевыми словами?).
Можете ли вы указать мне некоторые ссылки, которые они описывают этот процесс?
Изменить: Тем временем я нашел другой ответ тоже: поведение SharedPreferences при обновлении / удалении
Редактировать 2: С тех пор, как прошло довольно много времени, когда я впервые задал этот вопрос, я недавно узнал, что, начиная с Android 6.0 (API 23), также можно использовать функцию автоматического резервного копирования для защиты ваших общих настроек, как описано здесь Google. Просто добавьте allowBackup="true"
в вашем AndroidManifest.xml
файл.
3 ответа
Кристиан здесь говорит: данные вашего приложения останутся, когда пользователь установит обновления.
Но это должно быть с тем же package name
обнаружить как обновление предыдущего приложения.
EboMike в предупреждении для пользователя Android, что обновление приложения может привести к потере данных из старой версии приложения? говорит:
Откровенно говоря, потеря данных из-за обновления недопустима.
Редактировать:
Обычно SharedPreferences(а также другие пользовательские данные) сохраняются в процессе обновления, но иногда, из-за какой-то " неизвестной " проблемы, данные могут быть потеряны, и я полагаю, что это вне вашего контроля. Таким образом, вы можете просто поверить, что SharedPreferences будут сохранены ( см. Здесь).
Поэтому, если вы хотите избежать очистки данных пользователя при обновлении, вам нужно сохранить основные данные во внешнем хранилище (это может быть съемный носитель, например, SD-карта или внутреннее, несъемное хранилище). конфиденциально для вашего приложения. Или, по крайней мере, отложите для пользователя резервное копирование данных перед обновлением. Затем при первом запуске вашего (обновленного) приложения проверьте, есть ли файл резервной копии во внешнем хранилище или нет.
Если вы хотите знать, что должно / может произойти при обновлении приложения? Я не очень хорошее описание для этого. Это сложно и относительно Android Security
, Application signing
, copy protection
и другие темы. Я имею в виду, что если вы изменяете состояние своего приложения в любых вышеуказанных полях, это приводит к другому результату.
Например, если вы CHANGED COPY PROTECTION FROM ON to OFF OR OFF to ON
ваше приложение будет обновлено, но все ваши общие настройки будут потеряны, доступ к файлам будет невозможен и....
Вы должны заботиться об условиях, чтобы ваше новое приложение being considered
как обновление для предыдущего приложения (см. Вещи, которые не могут измениться).
Также вы должны быть осторожны с вашим кодом, это может быть вызвано удалением данных из ваших баз данных (см. Приложение для обновления с предварительно загруженным SQLite).
Но в конечном итоге, если быть осторожным, вы можете сказать:
Процесс обновления заменяет только файл apk (и то, что в нем находится, например, drawables,...) и не изменяет базы данных, общие преференции и любые другие файлы, сгенерированные во время выполнения (возможно, в этом случае новое приложение устанавливается с UID, который равен UID предыдущего приложения).
Вы можете увидеть эти страницы для более подробной информации:
Помогите!? Обновление нашего приложения на рынке удаляет сохраненные SharedPreferences.
Защита от копирования с рынка полностью нарушает доступ к файлам после обновления
Может кто-нибудь объяснить процесс обновления приложения?
После более 4 часов отладки я обнаружил, что сохраняю модель в виде строки, сериализуя ее. Сериализуемый класс имеет уникальный идентификатор по имени serialVersionUID, который устанавливается по умолчанию во время выполнения, а идентификатор вычисляется по имени класса, интерфейсам и именам переменных. Я узнал, что изменил класс модели, добавил переменную, а затем обновил приложение. Поскольку класс теперь изменился, поэтому был установлен новый serialVersionUID и, следовательно, при обновлении, он не смог десериализовать строку и создать модель и выдавал исключение java.io.InvalidClassException
Явно установите serialVersionUID, чтобы избежать этой проблемы
static final long serialVersionUID = 42L;
Я думаю, что когда я в последний раз обновлял свое приложение через Google Play, на sharedPreferences это не влияло.
Я использовал их для автоматического входа в систему, и после обновления он сделал это.
Это было месяц назад, моя память могла стать нечеткой, поэтому лучше услышать мнение других людей.