Podane odpowiedzi są dokładne, chcę tylko wyjaśnić z punktu widzenia programisty iOS.
iOS został zaprojektowany tak, aby zarządzać jak największą liczbą rzeczy, dzięki czemu Ty (i programiści) nie musisz się o to martwić. Rezultatem końcowym jest dość spójne podejście w różnych aplikacjach, w tym w aplikacjach Apple (nawet jeśli czasami Apple samo sobie radzi).
Biorąc to pod uwagę, założeniem jest:
- iOS wie więcej o pamięci niż my. Wie, ile ma i ile potrzebuje (do pewnego stopnia).
- iOS ma pełną kontrolę nad pamięcią; ma ostatnie słowo o tym, kto co używa.
- Jeśli iOS potrzebuje pamięci, znajdzie ją, i zwykle dzieje się to poprzez zabijanie innych procesów, które były bezczynne przez pewien czas (a za kulisami istnieje wiele zasad, nie znamy ich wszystkich i tak naprawdę nie martw się o nich).
- Wszystko, co robi procesor (CPU), wymaga energii. Absolutnie wszystko. Pamiętaj, że komputery to po prostu bardzo małe pojemniki z elektronami, które przenoszą je w bardzo małych przestrzeniach.
- Gdy aplikacja zostanie zabita, istnieją pewne uzgodnione protokoły (umowy), które określają, co należy zrobić. iOS wymusza i przenosi te protokoły. Ale praca musi być wykonana, nie jest darmowa i na pewno nie zawsze tania (tak naprawdę zależy od aplikacji).
To powiedziawszy, zakłada się, że większość użytkowników zamyka aplikacje w nadziei na zwiększenie żywotności baterii, mając wrażenie, że zamykając rzeczy, marnuje się mniej energii na utrzymanie tych aplikacji.
Prawda jest taka, że w iOS prawie nigdy tak nie jest. Gdy naciśniesz ekran główny, aplikacja zostanie zawieszona i nie będzie już korzystać z zasobów potrzebnych innej aplikacji. Jeśli nowa aplikacja (lub nawet iOS) potrzebuje tej pamięci, sama się nią zajmie, ale tylko wtedy, gdy będzie potrzebować.
Ciągle zamykasz aplikacje, zmuszasz iOS do zrobienia tego potencjalnie kosztownego zadania polegającego na naprawdę rozładowaniu aplikacji, zapisaniu jej stanu, a co nie, z dodatkowym problemem, że po ponownym otwarciu aplikacji wszystko to musi zostać przywrócone i, w zależności od złożoności aplikacji, wiele rzeczy musi zostać odczytanych z pamięci, do głównej pamięci telefonu i tak dalej. Całą tę dodatkową pracę można było uniknąć, po prostu pozwalając aplikacji pozostać w stanie „zawieszenia”.
Jednak …
W niektórych przypadkach (i są rzadkie, ale nie niemożliwie rzadkie), chcesz zabić aplikacje, które źle się zachowują. Przykładami są (ale nie wyłącznie): aplikacje zajmujące się dźwiękiem w tle lub usługi asynchroniczne, takie jak lokalizacja (gdzie aplikacja pyta o lokalizację, a iOS musi iść i zapytać, gdzie to jest, na przykład uruchamiając GPS w razie potrzeby) , streaming wideo itp.
Miałem niezliczoną liczbę aplikacji takich jak Lyft, United Airlines, a nawet Twitter, które kończyły się zepsutym stanem (lub po prostu nie działały poprawnie), albo dlatego, że jesteś w złej sieci (iOS jest naprawdę zły odzyskiwanie z niektórych złych sieci w ostatnich 3-4 wydaniach) lub sieć po prostu nie reaguje prawidłowo.
Z czasem większość z tych problemów ustępuje, a aplikacja zaczyna działać od nowa; ale jeśli naprawdę potrzebujesz, aby aplikacja działała teraz , musisz iść dalej i zapłacić cenę za zabicie jej i ponowne uruchomienie od zera. W ten sposób zużyłeś więcej baterii, ale hej, potrzebowałeś.
A jeśli to było mylące, mogę podać analogię samochodu, ponieważ to właśnie robimy przez cały czas.
Analogia samochodowa
Wiem, że technologia samochodów jest zaawansowana i nie jest to już dobry przykład, ale baw się ze mną tutaj .
Odpalenie silnika samochodu zużywało więcej paliwa niż tylko praca na biegu jałowym. Kiedy samochody miały gaźniki zamiast wtryskiwaczy, było jeszcze gorzej; dlatego wyłączenie silnika po zatrzymaniu się na czerwonym świetle może teoretycznie zużywać więcej paliwa niż tylko praca na biegu jałowym przez minutę. Nowsze samochody mają znacznie bardziej wydajny mechanizm i mogą zatrzymać silnik, ale pozostają w stanie częściowo uruchomionym (nie wchodźmy tutaj zbytnio w samochody).
Zamykanie aplikacji to odpowiednik osoby wyłączającej samochód przy każdym świetle stopu. W przeciwieństwie do pozostawiania go bezczynnego, aż będzie potrzebny, zwykle kilka sekund później.
Analogia nie jest idealna, bo prawdą jest, że bezczynne samochody nadal zużywają paliwo, podczas gdy zawieszone aplikacje nie; jednak w oczach telefonu nie używają niczego związanego z pamięcią / baterią (o ile oczywiście nie mają żadnego przetwarzania w tle jakiegokolwiek rodzaju).
Zasadniczo wyłączasz silnik za każdym razem, gdy zabijasz aplikację, i nie pozwalasz, aby „inteligentny” mechanizm iOS pracujący na biegu jałowym zajął się tym, więc kiedy światło zmieni kolor na zielony, możesz po prostu nacisnąć pedał przyspieszenia i silnik pracuje szybciej niż w 100%. Uruchamianie silnika ze stanu zatrzymania również zużywa więcej mocy niż tylko paliwo, musisz przekręcić rozrusznik, aby silnik można było obrócić, wtryskać paliwo i wytworzyć iskry, więc… to dużo pracy za kulisami. Aplikacje są jak silniki. :)