Przekaż mi wartość boolean do mojej aktywności, gdy utworzę ją za pomocą pakietu Intent BundleExtra. Teraz patrząc na activity lifecycle, jeśli moja aktywność zostanie zatrzymana (onStop
), inna aplikacja potrzebuje pamięci, aby proces aplikacji został zabity, a następnie użytkownik przechodzi do działania (onCreate
). Czy ostatni zestaw onCreate zawiera moją oryginalną wartość logiczną? Zakładam, że jeśli chciałbym, żeby ta boolean została zapisana, musiałbym ją zapisać w numerze OnSaveInstanceState
, zgadza się?Jeśli działanie zostanie zatrzymane, a następnie odtworzysz to, co zostanie przekazane do getIntent()
Odpowiedz
użyłbym OnPause() z tego powodu (od docs)
pamiętać, że ważne jest, aby zapisać trwałych danych w OnPause() zamiast z onSaveInstanceState (Bundle), ponieważ ten ostatni nie jest częścią połączeń zwrotnych cyklu życia od , więc nie będzie wywoływana w każdej sytuacji jako opisana w dokumentacji.
Następnie przeczytaj ponownie w dokumencie onCreate()
, np. z bazy danych lub innego zasobu została zapisana w
Więc w zależności, jak ważne jest, że wartość logiczna będzie używany mechanizm oszczędzania chcesz .. na stan przetrwałego. http://developer.android.com/reference/android/app/Activity.html#SavingPersistentState
I stanie UI takich jak prostych tekstów , pozycje używać onSaveInstanceState
jak opisano tutaj: Saving Android Activity state using Save Instance State
Jako podsumowanie: gdy proces zabity Boolean = poszedłjeśli nie został zapisany :)
Ma uno V. ma rację, w twoim przypadku musisz iść z onPause()
Faktem jest, żeSaveInstanceState (Bundle bundle) ma na celu zapisanie stanu w twoim bieżącym wystąpieniu. Więc kiedy aplikacja zostanie zabity, zapisany pakiet zbyt
Można użyć SharedPreferences zapisać wartość logiczną:
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context);
sharedPreferences.edit().putBoolean("hiBoolean", booleanValue).commit();
i pobrać go na swojej onCreate:
Boolean hiBoolean = sharedPreferences.getBoolean("hiBoolean", true);
To nie jest poprawne. Gdy proces hostingu Twojej aplikacji zostanie zabity, "Aktywny pakiet stanu instancji" zostanie zachowany przez ActivityManager i zostanie zwrócony, gdy użytkownik przejdzie do Twojej aplikacji. Android utworzy proces i utworzy instancję aplikacji, a następnie utworzy działanie, które było na szczycie stosu, a następnie przejdzie do ostatniego zapisanego pakietu stanu instancji. Wcześniej ten pakiet nie mógł być zachowany po ponownym uruchomieniu urządzenia, ale Android z dnia na dzień robi się niesamowity i zaczynał 21 poziom 21, pakiet jest również przechowywany po ponownym uruchomieniu komputera. –
Właściwie, kiedy swoją aktywność zostanie odtworzony, pierwotna intencja będzie nadal używana. getIntent()
zwróci tę samą intencję, co podczas tworzenia. Jeśli jednak masz inne dane, które chcesz zachować po odtworzeniu działania, musisz je zapisać, używając saveInstanceState()
. Możesz to sprawdzić, obracając urządzenie przy działającej aktywności, ponieważ zostanie ono zniszczone i odtworzone z tą samą intencją. Aby uzyskać więcej informacji, zobacz here.
- 1. GitHub API - gwiazdki, otrzymasz datę, a następnie zostanie utworzona gwiazda.
- 2. Działanie iOS11 UIBarButtonItem nie zostanie wywołane
- 3. Czy wywołanie zwrotne przekazane do setInterval zostanie uruchomione, nawet jeśli poprzednie nie zakończyło jeszcze swojej pracy
- 4. Baza danych Neo4j zostanie zablokowana, jeśli transakcja nie zostanie zamknięta.
- 5. Jeśli mogę rzucić IQueryable jako IEnumerable, a następnie wywołać metodę rozszerzenia Linq, która implementacja zostanie wywołana?
- 6. Co się stanie, jeśli niepoprawny adres zostanie uprzednio pobrany?
- 7. Co się stanie, jeśli lambda zostanie przeniesiona/zniszczona podczas działania?
- 8. Czy zadanie zostanie ukończone szybciej, jeśli jest to aktywne okno?
- 9. Co się stanie, jeśli segment uzgadniania połączenia TCP zostanie utracony?
- 10. Co to jest @id jako przekazane do zasobu $?
- 11. Array.Find with Delegate. Co zwraca, jeśli nie zostanie znaleziony?
- 12. savedInstanceState vs getIntent(). GetExtras()
- 13. Skonfiguruj FormControl, jeśli błąd md zostanie podniesiony
- 14. Prosty program konsoli nie zostanie zakończony, jeśli nazwa cudaMalloc zostanie nazwana
- 15. , jeśli wątek A rozpoczyna się przed wątkiem B w języku Java, to A zostanie zaplanowane przez os przed B?
- 16. Jak sprawdzić, co zostanie kliknięte w DropDownButton
- 17. Czy zakres transakcji wewnętrznej zostanie wycofany, jeśli zakres zewnętrznej transakcji nie zostanie zakończony?
- 18. Jak ustawić "Domyślną akcję" dla mojego kontrolera, który zostanie wywołany, gdy żadne inne działanie nie zostanie dopasowane?
- 19. Co się stanie, jeśli nowy obiekt instancji nie zostanie przypisany do zmiennej?
- 20. Czy zostanie wyłączone pole tekstowe, gdy formularz zostanie POSTED?
- 21. Czy Android Geofences zostanie usunięty, jeśli aplikacja zostanie zabita przez użytkownika?
- 22. View.onDraw() --- kiedy zostanie wywołany?
- 23. Kiedy strona PhoneApplicationPage zostanie usunięta?
- 24. Żądanie Youtube zostanie zablokowane
- 25. Przekierowanie asp.net mvc, jeśli zostanie zgłoszony wyjątek niestandardowy
- 26. Start programu MediaRecorder(), jeśli zostanie wywołany zbyt szybko
- 27. AsyncTask zawsze będzie działał, nawet jeśli aplikacja zostanie zniszczona?
- 28. Sprawdzanie zainstalowanych pakietów i jeśli nie zostanie znaleziony, zainstaluj
- 29. Wywoływanie C++ wskaźnik funkcji użytkownika: to-pointer zostanie uszkodzona
- 30. Przywróć domyślny katalog roboczy, jeśli plik bat zostanie nagle przerwany.
doskonały. Podsumowanie jest dokładnie tym, czego szukałem. Właściwie to chcę, żeby ta boolean zniknęła, więc mogę śledzić, gdzie jest on wywoływany z – jsb