2010-11-10 9 views
16

Kilka pytań:Pytania o aktualizacji aplikacji Android

  1. Co oznacza uaktualniania aplikacji mają na przechowywane dane tj preferencji i bazy danych? Czy system wykonuje czystą instalację nowej wersji (tj. Usuwa starszą wersję, a następnie instaluje nową) lub coś innego?

  2. Co zrobić, jeśli użytkownik chce zachować przechowywane dane - powiedz wartości we wspólnym preferencji lub bazie danych SQLite?

  3. Jak mogę emulować ten scenariusz app-update-install? Jeśli mam wersję "x" zainstalowaną na moim emulatorze i robię instalację adb w wersji "x + 1", otrzymuję komunikat o błędzie INSTALL_FAILED_ALREADY_EXIST. Czy powinienem spróbować hostować nowy apk na serwerze sieciowym, czy menedżer pakietów podejmie to jako aktualizację?

Odpowiedz

31
  1. Wszystkie dane nie znikają (pliki, preferencje, bazy danych). Bazy danych są specjalne, ponieważ możesz określić wersję bazy danych i jeśli wykryje ona zmienioną wersję, zadzwoni pod numer onUpgrade(). Dla wszystkich innych jesteś odpowiedzialny za aktualizowanie ich do nowej wersji, jeśli to konieczne.
  2. Jak powiedziałem w 1, Android wszystko utrzymuje. Od Ciebie zależy, jak sobie poradzisz ze zmianami w sposobie przechowywania danych.
  3. Użyj adb install -r /path/to/newApk.apk (zwróć uwagę na flagę -r, która mówi o aktualizacji do r). Zasadniczo przepływ pracy powinien być następujący:

.

adb uninstall my.package 
adb install /path/to/old.apk 
# play with app, set preferences, databases, etc. 
adb install -r /path/to/new.apk 
# watch your app crash in an impressive ball of fire 
# fix stuff 
# goto 0 

Inne uwagi: Tak, aplikacja wykona czyste usuwanie aplikacji przed instalacją nowej wersji. Jak już wspomniałem, dane Twojej aplikacji nie są usuwane z danych. Musisz jednak zachować ostrożność, ponieważ to usunięcie powoduje kilka rzeczy:

  • Wszelkie procesy związane z Twoją aplikacją są zabijane (więc jeśli aplikacja jest uruchomiona - wszelkie działania, usługi, wszystko, wszystkie komponenty będą zabity).
  • Wszystko, co jest związane z Twoją aplikacją, zostało usunięte z systemu, na przykład powiadomienia wysłane przez NotificationManager, alarmy ustawione przez AlarmManager itd. Nie jestem pewien, co dzieje się z jakimikolwiek widżetami (nigdy nie pracowałeś z widżetami).
+0

Dzięki za szczegółową odpowiedź! – Samuh

+0

Usuwane są także zmienne statyczne i wszelkie inne przydziały pamięci. –

1
  1. Trzeba zadbać o to samemu. Poszukaj metody onUpgrade(), tj.
  2. Ponieważ musisz zadbać o siebie, możesz dać użytkownikowi możliwość zrobienia wszystkiego.
  3. Należy upewnić się, że ustawiono opcję ponownej instalacji. Adb powinien zaktualizować aplikację poprawnie.