2017-01-23 2 views
3

У меня есть SharedPreference, который подсчитывает количество запусков моего приложения. Я ожидаю, что это будет 0, когда я установлю свое приложение. Тем не менее это 14. Такое же странное поведение я наблюдаю с моей базой данных, которая уже существует при новой установке.SharedPreferences не сбрасывается при переустановке

Я не собирался перерабатывать данные своего приложения (например, в облаке Google). На моем устройстве в настройках учетной записи включена синхронизация приложений и данных. Если я выключу его и сделаю переустановку, я наблюдаю такое же поведение.

Кто-нибудь видел такое поведение? Есть ли способ предотвратить переработку старых данных и принудительную установку?

+6

Может ли это быть из-за функции "Auto Backup" введена в Android Зефир? [https://developer.android.com/guide/topics/data/autobackup.html](https://developer.android.com/guide/topics/data/autobackup.html) – Mauin

+0

вот и все! Много волосков тянет за одну строку кода ... – Anthea

+1

@Mauin сделать ответ и получить кредит – Anthea

ответ

4

В Android Зефир Google представила «Auto Backup» функцию, которая включена по умолчанию, если ваш targetSdkVersion является> = 23.

Это приведет к резервному копированию вашей базы данных и SharedPreferences по умолчанию и восстановлению ее при повторной установке приложения. Чтобы отключить эту функцию, вы должны добавить android:allowBackup="false" к вашему AndroidManifest.xml.

Больше информации здесь: Auto Backup for Apps

0

Просмотрите свой код в AndroidManifest на приложении тега, если он имеет android: allowBackup = "false". Если у вас нет (по умолчанию это правда), ваше приложение участвует в инфраструктуре резервного копирования и восстановления android и может произойти именно так, как вы говорите.

Более подробная информация в этом посте: What is "android:allowBackup"?

0

Это должно быть обработано со стороны приложения относительно совместно Prefs.

Создал общедоступный вспомогательный класс и в вспомогательном классе имеет следующее условие.

private static String SHARED_PREFS_VERSION = "SharedPrefsVersion"; // In this save the version of current shared Prefs. 

void SharedPrefsHelper() { 

    if(BuildConfig.Version > getSharedPrefsVersion()) { 

     SharedPreferences.Editor editor = prefs.edit(); editor.clear(); // Clear all the shared Prefs and update the current version. 

     SetSharedPrefsVersion(BuildConfig.Version); 

    } 
} 

Для дальнейшей ссылки смотреть на:

https://stackoverflow.com/a/12381061/7364024