Czy savedInstanceState
pakiet w metodzie onCreate()
będzie żywy (nie zerowy) po zabiciu aplikacji? Jeśli tak, to gdzie ten pakiet jest przechowywany w systemie.Czy "Bundle savedInstanceState" będzie żył po zabiciu aplikacji?
Odpowiedz
Jeśli Android zabija proces hostingu aplikacji, to nadal utrzymuje „zapisany stan instancji "wszystkich aktywnych (nieukończonych) działań. Te dane są przechowywane przez ActivityManager
. Jeśli użytkownik powróci do aplikacji, Android utworzy nowy proces dla aplikacji, ponownie utworzy instancję Application
, a następnie utworzy instancję najwyższego działania w stosie działań. Następnie wywoła on onCreate()
dla tej instancji działania, przekazując mu "zapisany stan wystąpienia", który został ostatnio zapisany dla tego działania.
Po ponownym uruchomieniu telefonu wszystkie te dane zostaną utracone (system Android nie zapisze stanu aplikacji po ponownym uruchomieniu).
Nie będzie, aplikacja na Androida będzie działać tak długo, jak długo będzie działać: (pierwszy plan i tło).
Jeśli szukasz czegoś, co może obejmować różne okresy użytkowania aplikacji, użyj czegoś takiego jak SharedPreferences.
chodzi
jeśli system zabija proces aplikacji i użytkownik przechodzi z powrotem do aktywności
Dzieje się tak tylko gdy jest android pamięci potrzeb i zabić swoją aktywność do wolnych zasobów i twoi aktywność w stosie działań. udokumentowane, że jest to wygodny sposób na utrzymanie wygody użytkownika.
android dokumentacje:
Czynność tła (działalność, która nie jest widoczna dla użytkownika i została wstrzymana) nie jest krytyczna, więc system może bezpiecznie zabić jego proces odzyskania pamięci innym planie lub widoczne procesy. Jeśli jego proces musi zostać zabity, gdy użytkownik przejdzie z powrotem do działania (co spowoduje, że będzie znowu widoczny na ekranie), jego metoda onCreate (android.os.Bundle) zostanie wywołana z zapisaną wartościąInstanceState, którą wcześniej dostarczono on onSaveInstanceState (Android .os.Bundle)
, dzięki czemu może się ponownie uruchomić w tym samym stanie, w którym użytkownik ostatnio go zostawił.
, więc nie powinieneś oczekiwać, że instanceState będzie utrzymywane przez cały czas. Activity source code at codegrep
Edit
przeszukując google android instance state
Przyszedłem przez tego zasobu Android Recreating an Activity
Gdy działalność jest zniszczone, ponieważ użytkownik naciśnie Wstecz lub aktywność kończy się, koncepcję systemową ta instancja działania zniknęła na zawsze, ponieważ zachowanie wskazuje, że działanie nie jest już potrzebne. Jeśli jednak system niszczy aktywność z powodu ograniczeń systemowych (zamiast normalnego zachowania aplikacji), to mimo że faktyczna instancja działania zniknęła, system zapamiętuje, że istniał tak, że jeśli użytkownik nawiguje z powrotem do niego, system tworzy nowy wystąpienie działania przy użyciu zestawu zapisanych danych opisującego stan działania po jego zniszczeniu. Zapisane dane, które system wykorzystuje do przywrócenia poprzedniego stanu, nazywa się "stanem instancji" i jest zbiorem par klucz-wartość przechowywanych w obiekcie Bundle.
Edycja 2 Po wykopaniu około android wewnętrznych, wydaje się, że to wszystko jest o ActivityManagerNative
Kiedy działalność jest wstrzymanie jego stan jest przekazywany Korzystanie z działki sprzeciw wobec procesu ActivityManager.
public void activityPaused(IBinder token, Bundle state) throws RemoteException
{
Parcel data = Parcel.obtain();
Parcel reply = Parcel.obtain();
data.writeInterfaceToken(IActivityManager.descriptor);
data.writeStrongBinder(token);
data.writeBundle(state);
mRemote.transact(ACTIVITY_PAUSED_TRANSACTION, data, reply, 0);
reply.readException();
data.recycle();
reply.recycle();
}
A gdy ActivityManagerNative tworzy aktywność, przechodzi to państwo z powrotem do aktywności przy użyciu Parcel
public boolean onTransact(int code, Parcel data, Parcel reply, int flags)
throws RemoteException {
switch (code) {
case START_ACTIVITY_TRANSACTION:
{
data.enforceInterface(IActivityManager.descriptor);
IBinder b = data.readStrongBinder();
IApplicationThread app = ApplicationThreadNative.asInterface(b);
Intent intent = Intent.CREATOR.createFromParcel(data);
String resolvedType = data.readString();
Uri[] grantedUriPermissions = data.createTypedArray(Uri.CREATOR);
int grantedMode = data.readInt();
IBinder resultTo = data.readStrongBinder();
String resultWho = data.readString();
int requestCode = data.readInt();
boolean onlyIfNeeded = data.readInt() != 0;
boolean debug = data.readInt() != 0;
int result = startActivity(app, intent, resolvedType,
grantedUriPermissions, grantedMode, resultTo, resultWho,
requestCode, onlyIfNeeded, debug);
reply.writeNoException();
reply.writeInt(result);
return true;
}
.....
Dokumentacja mówi: 'Wtedy, jeżeli system zabija proces aplikacji i użytkownik przechodzi z powrotem do aktywności, system odtwarza działalność i przechodzi wiązka zarówno onCreate() i onRestoreInstanceState() "Czy coś mi brakuje? – Eugene
Istnieje również dobre wytłumaczenie, że stan instancji jest zapisywany, gdy aplikacja jest zabijana.https: //www.youtube.com/watch? V = fL6gSd4ugSI & feature = youtube_gdata_player – Eugene
"Kiedy twoja aktywność zostanie zniszczona, ponieważ użytkownik naciśnie przycisk Wstecz lub aktywność zostanie zakończona sama koncepcja systemu tej instancji Activity zniknęła na zawsze, ponieważ zachowanie wskazuje, że działanie nie jest już potrzebne. " Szukałem tego, dzięki! –
Poniższa tabela z jednego z materiałów szkoleniowych z systemu Android może być bardziej pomocna.
W tym pakiecie zapisanym przez onSavedInstanceState
jest ważne, gdy aplikacja jest OTWARTA, co oznacza, że aplikacja może być PAUSed, a nawet STOP i ZNISZCZONY (z przyczyn takich jak obrót), ale NIE WYDAWA, używając przycisku Wstecz.
Tabela pokazuje również inne dostępne opcje, jeśli nie jest to onSavedInstanceState
.
- 1. Ponowna instalacja usługi Android po zabiciu aplikacji
- 2. identyfikator Bundle zmieniane po zmianie nazwy aplikacji
- 3. Jak ponownie uruchomić usługę po zabiciu aplikacji z ostatnich zadań
- 4. Usługa android uruchamia się ponownie po zabiciu aplikacji
- 5. savedInstanceState vs getIntent(). GetExtras()
- 6. zapisywanie ArrayList w pakiecie savedInstanceState
- 7. Wykrywanie żył w liściach?
- 8. Alarm w menedżerze AlarmManager zostaje skasowany po zabiciu procesu
- 9. Rysowanie zagnieżdżonych diagramów żył
- 10. Kiedy jest używany pakiet savedInstanceState?
- 11. Sprawdzaj, czy bieżąca aktywność będzie ostatecznie korzeń zadanie, po oczekiwaniu czynności wykończeniowe zniknęły
- 12. Połączenia WCF tcp pozostają otwarte po zabiciu procesu
- 13. Praca wykonywana z prądem kwarkowym po zabiciu Tomcat
- 14. Prywatny interfejs API iOS do śledzenia lokalizacji w tle po zabiciu aplikacji (np. Znajdź moich znajomych)
- 15. Bundle Imię i Bundle Display Name
- 16. Co dokładnie robi pakiet Bundle Rails 3 "bundle install --deployment"?
- 17. Czy zmienna aplikacji będzie popularna dla klasycznego asp i asp.net?
- 18. „pożyczył wartość nie żył wystarczająco długo”
- 19. OSGI Bundle vs zależność słoik
- 20. Linker Error: iPhone Test jednostki Bundle przedstawieniu klasy aplikacji
- 21. Przyszłość FireBreath? Czy będzie martwy?
- 22. Czy window.navigator.userAgent naprawdę będzie przestarzały?
- 23. Blok Bundle Regulacja przepływu
- 24. sposób otwierania pliku .bundle
- 25. Nie można uruchomić `bundle install`
- 26. Rdzeń Dane zawarte w App Store Bundle
- 27. Czy CoreData utrzymuje dane po aktualizacji aplikacji?
- 28. Czy w aplikacji VS 2015 będzie dostępny szablon TypeScript dla aplikacji uniwersalnych?
- 29. Po zakończeniu aplikacji VB6?
- 30. Wysyłanie Bundle z fragmentem Transakcji
Od API 21 'savedInstanceState' może przetrwać restart po ustawieniu na [persistableMode] (https://developer.android.com/reference/android/R.attr.html#persistableMode). "Pakiet" zostanie przekazany do [onCreate (Bundle, PersistableBundle)] (https://developer.android.com/reference/android/app/Activity.html#onCreate (android.os.Bundle% 2C% 20android.os .PersistableBundle)) jako drugi parametr – passsy
, ponieważ @passsy zwrócił uwagę, że jest przeciążona nowa metoda 'onSaveInstanceState ', przyjmująca parametr' PersistableBundle' jako dodatkowy parametr, jeśli zastanawiasz się, dlaczego twoje 'onSaveInstanceState' nie zostanie wywołane, możesz użyć nowej metody . –