2017-01-23 3 views
3

Ich habe eine SharedPreference, die die Anzahl der Starts meiner App zählt. Ich erwarte, dass dies 0 ist, wenn ich meine App installiere. Trotzdem ist es 14. Das gleiche merkwürdige Verhalten beobachte ich mit meiner Datenbank, die bei einer Neuinstallation bereits existiert.SharedPreferences werden bei Neuinstallation nicht zurückgesetzt

Ich wollte meine App-Daten nicht recyceln (wie in der Google Cloud). Auf meinem Gerät in den Kontoeinstellungen ist die App-Datensynchronisierung aktiviert. Wenn ich es abstelle und eine Neuinstallation mache, beobachte ich das gleiche Verhalten.

Jeder hat so ein Verhalten beobachtet? Gibt es eine Möglichkeit, das Recycling alter Daten zu verhindern und eine ordnungsgemäße Installation zu erzwingen?

+6

dies wegen der "Auto Backup" -Funktion in Android Eibisch eingeführt werden könnten? [https://developer.android.com/guide/topics/data/autobackup.html](https://developer.android.com/guide/topics/data/autobackup.html) – Mauin

+0

das ist es! Eine Menge Haare ziehen für eine einzige Zeile Code ... – Anthea

+1

@Mauin machen eine Antwort und bekommen Kredit – Anthea

Antwort

4

In Android Eibisch Google führten die "Auto Backup" -Funktion, die standardmäßig aktiviert ist, wenn Ihre targetSdkVersion ist> = 23.

Dies sichert standardmäßig Ihre Datenbank und SharedPreferences und stellt sie bei der Neuinstallation der Anwendung wieder her. Um diese Funktion auszuschalten, müssen Sie android:allowBackup="false" zu Ihrer AndroidManifest.xml hinzufügen.

Mehr Infos hier: Auto Backup for Apps

0

Überprüfen Sie Ihren Code in AndroidManifest auf Tag-Anwendung, wenn es android: allowBackup = "false" hat. Wenn Sie nicht (standardmäßig ist es wahr), Ihre App beteiligt sich an Android-Backup und Wiederherstellung der Infrastruktur und kann genau das passieren, was Sie sagen.

Weitere Informationen in diesem Beitrag: What is "android:allowBackup"?

0

Dies muss von App Seite in Bezug auf gemeinsam genutzten Prefs behandelt werden.

Erstellt eine gemeinsame Präferenz Helper-Klasse und in der Hilfsklasse haben die folgende Bedingung.

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); 

    } 
} 

Weitere Referenz Blick auf:

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

Verwandte Themen