Zastanawia mnie jedna rzecz. Wygląda na to, że jeśli korzystam z jakiegoś programu na Androidzie i nacisnę przycisk „Home”, widzę ekran główny i mogę ponownie uruchomić program i zobaczyć ten program w takim samym stanie, w jakim był wcześniej - więc wygląda na to, że program nie został w pełni zrestartowany, właśnie zawieszono, a następnie wznowiono.
Jednak wydaje się, że nie dzieje się to spójnie z grą Air Control. Czasami, gdy gram w Air Control i naciskam „home”, a później ponownie uruchamiam Air Control - jest on wstrzymywany (tak jakbym nacisnął przycisk „pauza”) i mogę wznowić grę. Czasami to samo prowadzi do tego, że Air Control porzuca grę i zaczyna od nowa.
Wygląda więc na to, że czegoś nie rozumiem.
O co tu chodzi? Co dzieje się z programem po naciśnięciu przycisku „home”? Czy nadal działa lub co robi?
źródło
Odpowiedzi:
Naciśnięcie powoduje Homeprzejście z aplikacji do ekranu głównego, pozostawiając aplikację działającą w tle. To trochę jak przełączanie między oknami na komputerze z systemem Windows.
Tyle, że gdy w telefonie zaczyna brakować zasobów, takich jak pamięć, zacznie on zamykać aplikacje działające w tle, dzięki czemu telefon będzie miał wystarczającą ilość zasobów na to, co próbujesz teraz zrobić. Gry są często jednymi z pierwszych aplikacji, które telefon „zabija” w celu oszczędzania zasobów, ponieważ często zużywają dużo więcej pamięci i procesora niż inne aplikacje. Dlatego czasami twoja gra wciąż jest wstrzymana, a czasami Android ją dla ciebie zamknął.
BackPrzycisk jest sposób, aby zamknąć aplikacje tak, że są one rzeczywiście zamknięte.
Zobacz także Jaki jest właściwy sposób na zamykanie aplikacji w systemie Android?
źródło
Dokument dotyczący rozwoju systemu Android Zadania i tylny stos faktycznie ładnie to obejmuje. Odpowiedni fragment:
Podsumowanie : Zadanie zostaje przeniesione w tło po naciśnięciu
Home
i pozostaje w pamięci, nie robiąc nic i zachowując swój stan. Oznacza to, że (ogólnie rzecz biorąc) możesz wrócić do zadania, a ono rozpocznie od miejsca, w którym zostało przerwane. Jednak system Android może - i będzie - zabijał zadania w tle, jeśli będzie musiał odzyskać pamięć. Kiedy i czy tak się stanie, zależy wyłącznie od systemu i zapewne dlatego po wznowieniu widzisz niespójne zachowanie.Jeśli zadanie zostanie zniszczone przez system, konieczne będzie jego ponowne utworzenie po ponownym uruchomieniu. Jeśli więc autor aplikacji nie podejmie działań w celu zapisania stanu aplikacji podczas procesu niszczenia, zostanie on utracony (a zapisanie dokładnego stanu w grach takich jak gry jest dość niepraktyczne).
Kolejnym dobrym (ale także pełnym) dokumentem jest dokument dotyczący cyklu życia aktywności (jeśli przewiniesz nieco w dół, znajdziesz ładny schemat blokowy).
źródło
Naciśnięcie klawisza Home pozwala użytkownikowi rozpocząć nowe zadanie, pokazując program uruchamiający. Wszystkie aktywne Zadania (a zatem Działania, w tym przykład „Kontrola powietrza”) będą wywoływać swoją
onPause()
metodę.Do aplikacji (i ich aktywności) należy przywrócenie dokładnego poprzedniego stanu, gdy wróci do stanu widocznego. Możliwe jest również, że proces aplikacji zostanie zabity, gdy działanie jest w tle, ale nie powinno to wpłynąć na wrażenia użytkowników. Użytkownik nie powinien być w stanie odróżnić, czy działanie zostało właśnie wstrzymane, czy też zostało zabite. To może tłumaczyć różne zachowanie Air Control, co może być oznaką wadliwej implementacji zarządzania cyklem życia Androida.
źródło
destroy()
odpowiednie komponenty aplikacji.onStop
wywoływana jest metoda. Zabity proces nie oznacza, że działanie otrzymuje swojąonDestroyed
metodę, chociaż w rzeczywistości jest podobne. „Zabicie” procesu działania oznacza, że maszyna wirtualna jest usuwana z pamięci RAM. Wydaje mi się, że to (zabijanie go przez Androida) prawdopodobnie wpłynie na wrażenia użytkownika.Moja reputacja jest wciąż zbyt niska na tej stronie, aby zagłosować, więc odpowiadam na odpowiedź emphaisze Flow. Wciąż napotykam ten problem w jednej z moich aplikacji. Mam różne kontrolki pokrętła i musisz jawnie zapisać ich stan w onPause (), a następnie przywrócić stany w onResume () - Android nie pamięta ich stanów automatycznie.
Inną komplikacją jest to, że czasami Android wywołuje funkcję onCreate () aplikacji, gdy oczekuje się, że wywoła onResume ().
Tak więc Twój problem z Air Control (lub inną aplikacją) jest związany z tą aplikacją i powinieneś zgłosić zachowanie programistom w celu korekty. Większość aplikacji ma kontaktowy adres e-mail na rynku.
BTW, jeśli chcesz zrozumieć cykl życia aplikacji, polecam Rozdział 2 Cześć Eda Burnette'a dla Androida, szczególnie rysunek 2.3.
źródło
Przycisk Home Naciśnięty w aplikacji:
Większość aplikacji zapisuje swój stan (dowolny fragment danych, który byłby potrzebny do zachowania spójności podczas wznawiania), a urządzenie przełączy się na aplikację uruchamiającą.
Przycisk Home Naciśnięty na ekranie głównym:
Jest to konfigurowalne przez wiele zewnętrznych programów uruchamiających; jednak wiele z nich domyślnie przywraca cię do „głównego” ekranu głównego (domyślny program uruchamiający to robi).
Co może martwić twój przyjaciel:
Przełączanie aplikacji może wymagać dużej ilości pamięci i powodować zapisywanie danych na kilku dyskach. To wykorzystuje baterię; jednak zazwyczaj nie jest to główna przyczyna wyczerpania baterii w urządzeniach (systemy operacyjne są zoptymalizowane do wykonywania tych czynności).
Niektóre aplikacje będą nadal działać jako aplikacje w tle, więc naciśnięcie przycisku Home nie zabije ich (np. Muzyka Google Play będzie nadal odtwarzana po naciśnięciu przycisku Home).
Twój przyjaciel może się martwić, że naciśnięcie przycisku Home nie spowoduje wyjścia z programu i dlatego nadal działa. Android w razie potrzeby zwolni te aplikacje.
Ty i twój przyjaciel powinniście bardziej przejmować się wyświetlaczem, który zużywa najwięcej energii.
źródło