Cristian tutaj mówi: dane Zastosowanie będą pozostawać gdy użytkownik zainstalować aktualizacje.
Ale musi być z tym samym, package name
aby wykryć jako aktualizację poprzedniej aplikacji.
EboMike w Ostrzeżenie użytkownika Androida, że aktualizacja aplikacji może prowadzić do utraty danych ze starej wersji aplikacji? mówi:
Szczerze mówiąc, utrata danych z powodu aktualizacji jest niedopuszczalna.
Edycja :
Zwykle SharedPreferences (jak również inne dane użytkownika) zostaną zachowane podczas procesu aktualizacji, ale czasami, z powodu jakiegoś „ nieznanego ” problemu, dane mogą zostać utracone i myślę, że jest to poza twoją kontrolą. Możesz więc po prostu uwierzyć, że SharedPreferences zostaną zachowane ( patrz tutaj ).
Tak więc, jeśli chcesz uniknąć usuwania danych użytkownika w trakcie aktualizacji, musisz zapisać główne dane w pamięci zewnętrznej (może to być wymienny nośnik pamięci, taki jak karta SD lub wewnętrzna, niewymienna pamięć masowa), a nie prywatna dla Twojej aplikacji lub przynajmniej odłóż, aby użytkownik mógł wykonać kopię zapasową danych przed aktualizacją. Następnie podczas pierwszego uruchomienia (zaktualizowanej) aplikacji sprawdź, czy jest jakiś plik kopii zapasowej w pamięci zewnętrznej, czy nie.
Jeśli chcesz wiedzieć, jakie rzeczy muszą / mogą się wydarzyć podczas aktualizacji aplikacji? , Ja nie każdy opis dobre dla this.It jest skomplikowane i względne z Android Security
, Application signing
, copy protection
i inne topics.I znaczy, że jeśli zmieni stan swojej aplikacji w dowolnych powyższych dziedzinach, powoduje inny wynik.
Na przykład jeśli Ty CHANGED COPY PROTECTION FROM ON to OFF OR OFF to ON
, Twoja aplikacja zostanie zaktualizowana, ale spowoduje utratę wszystkich wspólnych preferencji, dostęp do plików będzie niemożliwy i ....
Chociaż musisz uważać na warunki, twoja nowa aplikacja being considered
jest aktualizacją poprzedniej aplikacji (patrz Rzeczy, których nie można zmienić ).
Musisz również uważać na swój kod, może to być spowodowane usunięciem danych z twoich baz danych (patrz aktualizacja aplikacji z wstępnie załadowanym SQLite ).
Ale ostatecznie, jeśli zachowasz ostrożność, możesz powiedzieć:
Proces aktualizacji zastępuje tylko plik apk (a więc to, co w nim jest, na przykład elementy rysunkowe, ...) i nie zmienia baz danych, wspólnych preferencji ani żadnych innych plików, które zostały wygenerowane w czasie wykonywania (prawdopodobnie w tym przypadku nowa aplikacja jest instalowana z UID, który jest równy UID poprzedniej aplikacji).
Więcej informacji można znaleźć na tych stronach:
Wsparcie!? Aktualizacja naszej aplikacji na rynku powoduje usunięcie zapisanych SharedPreferences.
Rynkowa ochrona przed kopiowaniem całkowicie blokuje dostęp do plików po aktualizacji.
Czy ktoś może wyjaśnić proces aktualizacji aplikacji?
Po debugowaniu przez ponad 4 godziny dowiedziałem się, że zapisuję model jako ciąg poprzez serializację. Klasa możliwa do serializacji ma unikatowy identyfikator według nazwy serialVersionUID , który jest ustawiany domyślnie w czasie wykonywania, a identyfikator jest obliczany na podstawie nazwy klasy, interfejsów i nazw zmiennych. Dowiedziałem się, że zmieniłem klasę modelu, dodałem zmienną, a następnie zaktualizowałem aplikację. Ponieważ klasa jest teraz zmieniona, więc ustawiono nowy serialVersionUID, a tym samym podczas aktualizacji, nie był w stanie deserializować ciągu i utworzyć modelu i podawał java.io.InvalidClassException
Jawnie ustaw serialVersionUID, aby uniknąć tego problemu
static final long serialVersionUID = 42L;
źródło
Myślę, że kiedy ostatnio zaktualizowałem moją aplikację przez Google Play, nie miało to wpływu na SharedPreferences.
Używałem ich do automatycznego logowania, a po aktualizacji tak się stało.
To było miesiąc temu, moja pamięć mogła się rozmyć, więc lepiej posłuchać opinii innych.
źródło