Co dzieje się z uruchomionym programem po naciśnięciu przycisku „home” na telefonie z Androidem?

27

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?

sharptooth
źródło
Wątpię, aby naciśnięcie przycisku home powodowało większe zużycie energii.
Flow

Odpowiedzi:

12

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?

GAThrawn
źródło
26

Dokument dotyczący rozwoju systemu Android Zadania i tylny stos faktycznie ładnie to obejmuje. Odpowiedni fragment:

Zadanie to spójna jednostka, która może przejść do „tła”, gdy użytkownicy rozpoczynają nowe zadanie lub przechodzą do ekranu głównego za pomocą klawisza HOME. W tle wszystkie działania w zadaniu są zatrzymywane, ale tylny stos dla zadania pozostaje nienaruszony - zadanie po prostu straciło ostrość, gdy odbywa się inne zadanie, jak pokazano na rysunku 2. Zadanie może następnie powrócić do „ pierwszy plan ”, aby użytkownicy mogli zacząć od miejsca, w którym przerwali. Załóżmy na przykład, że bieżące zadanie (Zadanie A) ma trzy działania na swoim stosie - dwa w ramach bieżącego działania. Użytkownik naciska klawisz HOME, a następnie uruchamia nową aplikację z poziomu uruchamiania aplikacji. Kiedy pojawi się ekran główny, zadanie A przechodzi w tło. Po uruchomieniu nowej aplikacji system uruchamia zadanie dla tej aplikacji (Zadanie B) z własnym stosem działań. Po interakcji z tą aplikacją użytkownik ponownie powraca do strony głównej i wybiera aplikację, która pierwotnie uruchomiła Zadanie A. Teraz zadanie A pojawia się na pierwszym planie - wszystkie trzy działania na stosie są nienaruszone, a działanie na górze stosu jest wznawiane. W tym momencie użytkownik może również przełączyć się z powrotem do zadania B, idąc do domu i wybierając ikonę aplikacji, która rozpoczęła to zadanie (lub dotykając i przytrzymując klawisz HOME, aby wyświetlić ostatnie zadania i wybierając jedno). To jest przykład wielozadaniowości na Androidzie. użytkownik może również powrócić do zadania B, przechodząc do domu i wybierając ikonę aplikacji, która rozpoczęła to zadanie (lub dotykając i przytrzymując klawisz HOME, aby wyświetlić ostatnie zadania i wybierając jedno). To jest przykład wielozadaniowości na Androidzie. użytkownik może również powrócić do zadania B, przechodząc do domu i wybierając ikonę aplikacji, która rozpoczęła to zadanie (lub dotykając i przytrzymując klawisz HOME, aby wyświetlić ostatnie zadania i wybierając jedno). To jest przykład wielozadaniowości na Androidzie.

Uwaga: wiele zadań może być przechowywanych jednocześnie w tle. Jeśli jednak użytkownik wykonuje jednocześnie wiele zadań w tle, system może rozpocząć niszczenie działań w tle w celu odzyskania pamięci, powodując utratę stanów aktywności. Zobacz następną sekcję o stanie aktywności.

Podsumowanie : Zadanie zostaje przeniesione w tło po naciśnięciu Homei 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).

eldarerathis
źródło
Więc są zabijani na podstawie zadania, a nie na działanie / proces. To drugie pozwoliłoby na częściowe zabicie zadania, co prawdopodobnie jest niepożądane.
jiggunjer
4

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.

Pływ
źródło
Myślę, że przez „zabity” masz na myśli zatrzymany, a nie zniszczony. Wierzę w normalną terminologię Linuksa, kiedy zabijasz proces (np. Aktywność) ci destroy()odpowiednie komponenty aplikacji.
jiggunjer
Nie, mam na myśli zniszczone.
Flow,
Po naciśnięciu klawisza home onStopwywoływana jest metoda. Zabity proces nie oznacza, że ​​działanie otrzymuje swoją onDestroyedmetodę, 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.
jiggunjer
4

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.

Gdalya
źródło
3

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.

Dylan Jaga
źródło