Tworzę aplikację do wyszukiwania zdarzeń, ustawiamy kryteria wyszukiwania z jednego ekranu wypełniającego na innym ekranie, a następnie użytkownik może edytować kryteria wyszukiwania z trzeciego ekranu i przechodzi do czwartego ekranu.
Aby wykonać powyższe zadanie, używam statycznego obiektu, który zapamiętuje wartości wokół aplikacji i nie muszę robić nic więcej.
Ale obawiam się, że jeśli chodzi o cykl życia obiektów statycznych w systemie Android, jeśli wykryto małą ilość pamięci, Android usunąć obiekty statyczne?
Ponieważ Android obsługuje wielozadaniowość, jeśli użytkownik przełączy się na inną aplikację i gdy użytkownik wróci, aplikacja zacznie działać szalenie, czy statyczny obiekt zostanie usunięty, gdy będzie działał wielozadaniowo ??? dowolny pomysł ?? a także sugerować trzymanie statycznego obiektu metodą singletona jest lepszym podejściem ???
Cóż, wzorzec Singleton jest również oparty na użyciu zmiennych statycznych, więc w rzeczywistości byłbyś w tej samej pozycji. Chociaż podejście statyczne może działać w większości przypadków, może się zdarzyć, że w niektórych przypadkach, gdy pamięć jest pełna, a inne działanie zajmuje pierwszy plan, zanim aplikacja przejdzie do następnego ekranu, proces działania może zostać przerwany i utracisz wartości statyczne. Jednak Android oferuje kilka opcji utrwalania wartości między stanami lub przesyłania ich, takich jak:
Możesz uzyskać kilka przykładów kodu wykorzystania preferencji, intencji i bazy danych sqlite, patrząc na drzewo kodu źródłowego Aegis-Shield w kodzie Google lub w innych aplikacjach na Androida typu open source.
źródło
Po kilku badaniach okazuje się, że wykorzystanie aplikacji do przechowywania singletonów nie jest takim świetnym pomysłem, chyba że jesteś gotowy, aby go odtworzyć:
Nie przechowuj danych w obiekcie aplikacji
więc chociaż zaakceptowana odpowiedź jest poprawna technicznie, nie zawiera wszystkich informacji.
Jak sugeruje powyższy link, jeśli naprawdę chcesz trzymać się tego modelu, musisz być gotowy na sprawdzenie wartości null i odtworzenie danych, jeśli to możliwe.
źródło
@ r1k0 jest tutaj. Przechowywanie danych w statycznych polach klasy nie będzie trwać samoistnie podczas kończenia i ponownego uruchamiania procesów aplikacji. Android rutynowo zabija procesy (uruchomione aplikacje), gdy potrzebuje pamięci.
Zgodnie z dokumentem systemu Android: stan aktywności i wyrzucenie z pamięci ,
Możesz zapisywać i przywracać stan prymitywów, a także obiektów serializowalnych i parcelowalnych, korzystając z poniższych metod. Są one wywoływane automatycznie podczas normalnego cyklu życia czynności.
Tak więc, jeśli masz klasę, która ma tylko zmienne statyczne, możesz zapisać stan każdego pola w onSaveInstanceState () i przywrócić je w onRestoreInstanceState (). Gdy Android zabije proces, w którym działa Twoja aplikacja, stan twoich zmiennych zostanie zapisany, a gdy Android przywróci aplikację, wartości zostaną przywrócone w pamięci w takim samym stanie jak poprzednio.
źródło