Wiem, że najwyraźniej nie jest dobrym pomysłem zamykanie aplikacji na iPhonie, aby oszczędzać na baterii. Przeczytałem pytania i odpowiedzi: Czy aplikacje wymuszające zamykanie mają jakąkolwiek korzyść na urządzeniach z iOS? ale nadal nie do końca mnie żeluje. Czasami znalazłem ponad 50 uruchomionych aplikacji, więc nie zamykając ich nie ma sensu.
Może jestem trochę stary i nie możesz uczyć starych psów nowych sztuczek, ale czy ktoś może tu wyjaśnić DLACZEGO lepiej jest po prostu uruchomić wszystkie te aplikacje? A kiedy mówię „wyjaśnij”, mam na myśli laika, żebym mógł zrozumieć.
Odpowiedzi:
Nie jesteś sam. Ludzie są przyzwyczajeni do swoich przyzwyczajeń do komputerów stacjonarnych i zrozumiałe jest, że przenoszą te nawyki na swoje iPhone'y i iPady.
Pozwól mi jednak spróbować wyjaśnić to za pomocą analogii:
Wyobraź sobie, że jest upalny dzień, a poza ogrodem. Masz ochotę, więc idź do kuchni, weź dużą szklankę, wlej trochę lodu i napełnij ją wodą. Następnie wypijasz połowę, a resztę opróżniasz w zlewie, zanim wrócisz na zewnątrz. Niedługo potem znów poczujesz pragnienie, więc wróć do kuchni, weź tę samą szklankę, wlej trochę lodu i napełnij ją wodą. Znowu pijesz tylko połowę, a resztę opróżniasz w zlewie!
Powyższy obieg pracy po prostu nie ma sensu. Dlaczego nie zabrałbyś szklanki na zewnątrz? I nie tylko marnujesz wodę, opróżniając ją, ale spędzasz więcej czasu i energii na jej odzyskanie.
Podobnie, kiedy wychodzisz z aplikacji, faktycznie zużywasz w tym celu trochę energii (np. Czyścisz ją z pamięci RAM itp.), A następnie ponownie, kiedy musisz ją ponownie uruchomić i ponownie załadować do pamięci RAM.
Tak więc przez większość czasu najlepiej pozostawić otwarte aplikacje. Mimo że są otwarte, tak naprawdę siedzą w trybie zawieszenia, który nie zużywa żadnej mocy baterii. Tak, aplikacja jest nadal ładowana do pamięci RAM i zajmuje miejsce , ale tak naprawdę nic nie robi - po prostu leży w uśpieniu. A ponieważ w tym stanie nie zużywa żadnej mocy baterii, nie ma żadnej korzyści z jej opuszczenia z punktu widzenia oszczędzania baterii - zwłaszcza jeśli jest to aplikacja, o której wiesz, że będziesz używać jej wielokrotnie w ciągu dnia.
Naprawdę nie ma żadnej korzyści, aby wymusić zamknięcie aplikacji, ponieważ sam iOS zrobi to za Ciebie, jeśli / kiedy będzie to konieczne , aby zwolnić pamięć RAM. Jeśli więc masz 50 otwartych aplikacji, a one pozostają otwarte, iOS nie został zmuszony do tego, aby zamknąć jakąkolwiek z nich, aby zwolnić pamięć.
Teraz, jak wszystko, zawsze są wyjątki od reguły (takie jak aplikacje, które muszą wykonywać zadania w tle). Przykładem może być odtwarzanie muzyki podczas wykonywania innych czynności za pomocą telefonu, pobieranie treści w tle lub liczenie kroków, które przechodzisz w ciągu dnia itp. IOS ma jednak wyjątkowo wydajny proces zarządzania aplikacjami / zadaniami w tle, a jeśli zdecydujesz się je zakończyć, w zasadzie mówisz, że nie ufasz systemowi operacyjnemu, że wykona swoje zadanie poprawnie.
Możesz więc zamknąć aplikacje, gdy zajdzie taka potrzeba (np. Ponieważ jest zamrożone itp.), Ale nie rób tego, aby oszczędzać energię baterii. W rzeczywistości, jeśli to zrobisz, osiągniesz coś przeciwnego i zużyjesz więcej energii baterii w ciągu dnia!
Podsumowanie
Większość aplikacji w App Switcherze będzie w stanie zawieszenia - oznacza to, że nie są: widoczne na ekranie, nie wykonują kodu, nie korzystają z procesora lub karty graficznej ani z baterii. Jednak oni są nadal zamieszkuje w pamięci , dopóki są one oczyszczone (jeśli to konieczne) przez system, aby zwolnić pamięć:
Źródło : patrz Tabela 2-3 w ramach pierwszego linku referencyjnego na końcu tej odpowiedzi.
Jedynymi aplikacjami faktycznie działającymi na iPhonie w danym momencie są aktywna aplikacja (tj. Ta widoczna na ekranie) i wszelkie inne działające w tle . ( Uwaga: istnieją pewne tymczasowe wyjątki w przypadku aplikacji, które wciąż potrzebują czasu, aby ukończyć wykonywanie kodu, który już uruchomiły, gdy były aktywne - zwykle jest to tylko sekunda, ale teoretycznie może trwać dłużej niż minutę). .
Bibliografia
źródło
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:
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. :)
źródło
Jako analogię ... w przypadku samochodu, jeśli musisz zrobić zbyt wiele postojów w ciągu dnia i ciągle zatrzymywać i uruchamiać silnik, nadejdzie czas, kiedy akumulator całkowicie się wyczerpie. Może się to zdarzyć, jeśli czas ładowania podczas jazdy między postojami nie jest wystarczająco długi, aby przywrócić ogromną ilość energii, która jest zasysana z akumulatora przy każdym uruchomieniu silnika. Poza tym nie jest to dobre dla rozrusznika i ogólnego zużycia gazu. Dlatego wielu kierowców ciężarówek dostawczych będzie utrzymywać silnik na biegu jałowym podczas krótkich postojów.
Ta analogia jest IMO podobna do mitu o oszczędzaniu pamięci.
źródło
Po prostu rzucam inną opinię w celu dyskusji. Ta koncepcja ma pewien stopień prawdy, ale gdy masz już pewną liczbę otwartych aplikacji, prawdopodobnie zaczniesz odczuwać malejące zyski z zawieszenia aplikacji.
Im więcej aplikacji masz otwartych, tym bardziej baran będzie się przyzwyczajał. Zazwyczaj każda aplikacja w pamięci jest dzielona na pamięć, której aktualnie używa sama aplikacja, pamięć, którą aplikacja chce mieć pod ręką, i pamięć, na którą system operacyjny faktycznie pozwolił, aby aplikacja mogła z niej korzystać, co daje ostateczną ilość pamięci, którą aplikacja jest dozwolone do użycia. Powodem, dla którego aplikacja przechowuje osobną część tej pamięci jako pamięci, której chce użyć, jest to, że aplikacja może wymagać powiększenia stosu, ale niekoniecznie chce to zrobić od razu, ponieważ jest to złe dla śmieciarzy mają duże sterty (duże sterty = dłuższe zbieranie śmieci), więc aplikacja odłoży część pamięci, która nie jest aktualnie używana, ale może być używana przez aplikację wyłącznie w razie potrzeby.
Powiedzmy, że system operacyjny pozwala mojej aplikacji do 700 MB, a zestaw aplikacji odkłada 300 MB pamięci dla siebie, pozostawiając 400 MB dla mojej aplikacji do użycia, jeśli chce, ale wtedy inna aplikacja otwiera się i potrzebuje trochę pamięci; system operacyjny przegląda wszystkie różne aplikacje i decyduje, czy można pobrać trochę pamięci z innej aplikacji i użyć jej w nowej aplikacji, w takim przypadku może zdecydować o pobraniu 150 MB pamięci dozwolonej z moich aplikacji i przekazaniu jej nowej aplikacji , wymagając zamiany pamięci, aby nowa pamięć aplikacji mogła być używana (pomyśl o tym jako o realokacji środków w firmie), im więcej aplikacji masz otwartych, tym więcej pracy musi wykonać system operacyjny, aby faktycznie zdecydować które aplikacje mogą wysysać, aby dać nową pamięć aplikacji.
W tym sensie każda aplikacja, która zostanie otwarta i zawieszona, zwiększa złożoność tego procesu, zwiększając jego obciążenie procesora i ostatecznie wymagając potencjalnie większej mocy baterii do otwierania przyszłych aplikacji niż energii baterii zaoszczędzonej przez nie zamykanie innych aplikacji.
Pamiętajmy, że nie bierze to pod uwagę faktu, że jeśli nie zabijesz aplikacji, mogą działać usługi działające w tle, które pochłoną moc obliczeniową, na przykład powiadomienia ustawione tak, aby powiadamiały Cię o czasomierzu itp. Z drugiej strony niektóre aplikacje nie używają prawdziwej usługi w tle i faktycznie używają powiadomień wypychanych z usług takich jak firebase, które nie wymagają, aby aplikacja była otwarta w dowolnym momencie.
Kolejną rzeczą do rozważenia, im więcej aplikacji ciągle otwierasz, tym bardziej fragmentaryczna będzie początkowo pamięć, dopóki system operacyjny nie przejdzie i nie wyczyści pamięci, aby była bardziej czysta i bardziej wydajna, samo to również zużywa moc przetwarzania, a także im więcej pamięci zajmują aplikacje, tym bardziej intensywny będzie ten proces dla twojego urządzenia.
Wszystko to oznacza, że pozostawienie otwartych aplikacji jest w większości bardziej wydajne, chyba że otwartych jest zbyt wiele aplikacji, jednak nie jestem pewien, ile aplikacji musi być otwartych, aby osiągnąć ten próg, jeśli liczba istnieje.
Źródła:
SGen śmieciarka dla Mono: http://www.mono-project.com/docs/advanced/garbage-collector/sgen/
Omówienie narzędzia do profilowania pamięci dla aplikacji Xamarin na iOS i Androida, które pokazuje sposób zarządzania pamięcią przez aplikację (zestaw roboczy, bajty prywatne, przydzielona pamięć itp.) Https://blog.xamarin.com/say-hello-to -the-Xamarin-profiler /
źródło
Wersja czystego cięcia: Lepiej, ponieważ system operacyjny został zaprojektowany tak, aby był lepszy do tego stopnia, że użytkownik chciałby utrzymać aplikacje w stanie (lub w stanie „zawieszenia”), aby zebrać więcej informacji o twoich działaniach [*] później Jeśli potrzebne.
Dłuższa wersja: aplikacje, które są „zawieszone”, będą miały swój stan zapisany w pamięci, więc gdy chcesz je ponownie wykonać proces ładowania wszystkiego, zajmie to mniej czasu procesorowi i prawie nie będzie używać jednostki pamięci ... Z nie możesz wiedzieć, czy twoje aplikacje robią w tle jakieś inne rzeczy, które w wielu przypadkach siedzą i zbierają dane na twój temat.
[*] Aby rozwinąć gromadzenie danych z Twojej strony ... aplikacje przechowywane w pamięci mogą być „zawieszone” lub aktywne w tle. Ty, jako właściciel urządzenia, nie możesz wiedzieć (jeśli nie posiadasz wiedzy i niektórych innych aplikacji, aby aktywnie skanować użycie procesora), co naprawdę mówi ta aplikacja. Z punktu widzenia bezpieczeństwa radzę zamknąć dowolną aplikację, której nie będziesz używać przez następne 10 minut.
PS Ta praktyka odbywa się na urządzeniach z Androidem, a także ...
źródło