Wciąż jest wiele osób, które nie wiedzą, jak działa wielozadaniowość w iOS. Na początek jednak trzeba zaznaczyć, że nie jest to prawdziwa wielozadaniowość, a bardzo sprytne rozwiązanie, które nie obciąża systemu ani użytkownika.
Często można usłyszeć przesądy, że aplikacje działające w tle w iOS zapełniają pamięć operacyjną, co skutkuje spowolnieniem systemu i wydłużeniem czasu pracy baterii, dlatego użytkownik powinien je wyłączyć ręcznie. Pasek wielozadaniowości tak naprawdę nie zawiera listy wszystkich uruchomionych procesów w tle, a jedynie ostatnio uruchomione aplikacje. Dzięki temu użytkownik nie musi się martwić o procesy działające w tle, z wyjątkiem kilku przypadków. Po naciśnięciu przycisku Home aplikacja zwykle przechodzi w stan uśpienia lub zamyka się, dzięki czemu nie obciąża już procesora ani baterii i w razie potrzeby zwalnia niezbędną pamięć.
Nie jest to więc pełnoprawna wielozadaniowość, gdy uruchomionych jest kilkadziesiąt procesów, na pierwszym planie zawsze działa tylko jedna aplikacja, która w razie potrzeby jest wstrzymywana lub całkowicie wyłączana. Tylko kilka procesów wtórnych działa w tle. Dlatego rzadko zdarza się, że na iOS zdarzy się awaria aplikacji, na przykład Android jest przeciążony uruchomionymi aplikacjami, którymi musi się zająć użytkownik. Z jednej strony utrudnia to pracę z urządzeniem, z drugiej powoduje np. powolne uruchamianie i przejścia pomiędzy aplikacjami.
Typ środowiska wykonawczego aplikacji
Aplikacja na Twoim urządzeniu iOS znajduje się w jednym z 5 stanów:
- Działanie: aplikacja jest uruchomiona i działa na pierwszym planie
- Tło: nadal działa, ale działa w tle (możemy korzystać z innych aplikacji)
- Zawieszony: Nadal korzysta z pamięci RAM, ale nie działa
- Nieaktywny: aplikacja jest uruchomiona, ale polecenia pośrednie (na przykład, gdy zablokujesz urządzenie z uruchomioną aplikacją)
- Nie działa: Aplikacja została zakończona lub nie została uruchomiona
Zamieszanie pojawia się, gdy aplikacja przechodzi w tło, aby nie przeszkadzać. Po naciśnięciu przycisku Home lub użyciu gestu zamknięcia aplikacji (iPad) aplikacja przechodzi w tło. Większość aplikacji zostaje zawieszona w ciągu kilku sekund (są przechowywane w pamięci RAM iDevice, dzięki czemu można je szybko uruchomić, nie obciążają tak bardzo procesora, a tym samym oszczędzają baterię). Możesz pomyśleć, że jeśli aplikacja nadal korzysta z pamięci, masz aby go ręcznie usunąć, aby go zwolnić. Ale nie musisz tego robić, ponieważ iOS zrobi to za Ciebie. Jeśli w tle zawieszona jest wymagająca aplikacja, np. gra wykorzystująca dużą ilość pamięci RAM, iOS w razie potrzeby automatycznie usunie ją z pamięci i będzie można ją ponownie uruchomić, dotykając ikony aplikacji.
Żaden z tych stanów nie jest odzwierciedlany na pasku wielozadaniowości, panel pokazuje jedynie listę ostatnio uruchomionych aplikacji, niezależnie od tego, czy aplikacja jest zatrzymana, wstrzymana, czy działa w tle. Możesz także zauważyć, że aktualnie uruchomiona aplikacja nie pojawia się w panelu Wielozadaniowość
Zadania w tle
Zwykle po naciśnięciu przycisku Początek aplikacja będzie działać w tle, a jeśli z niej nie korzystasz, zostanie automatycznie wstrzymana w ciągu pięciu sekund. Jeśli więc pobierasz podcast, system ocenia go jako działającą aplikację i opóźnia zakończenie o dziesięć minut. Najpóźniej po dziesięciu minutach proces zostaje zwolniony z pamięci. Krótko mówiąc, nie musisz się martwić przerwaniem pobierania poprzez naciśnięcie przycisku Home, jeśli jego ukończenie nie zajmie więcej niż 10 minut.
Nieograniczone działanie w tle
W przypadku braku aktywności system zamyka aplikację w ciągu pięciu sekund, a w przypadku pobierania zamknięcie jest opóźnione o dziesięć minut. Istnieje jednak niewielka liczba aplikacji, które wymagają działania w tle. Oto kilka przykładów aplikacji, które mogą działać w tle przez czas nieokreślony w systemie iOS 5:
- Aplikacje odtwarzające dźwięk, które należy na chwilę przerwać (wstrzymywanie muzyki podczas rozmowy telefonicznej itp.),
- Aplikacje śledzące Twoją lokalizację (oprogramowanie nawigacyjne),
- Aplikacje odbierające połączenia VoIP, np. jeśli korzystasz ze Skype'a, możesz odbierać połączenia nawet wtedy, gdy aplikacja działa w tle,
- Automatyczne pobieranie (np. z Kiosku).
Wszystkie aplikacje powinny zostać zamknięte, jeśli nie wykonują już żadnego zadania (np. pobierania w tle). Istnieją jednak wyjątki, które działają w tle w sposób ciągły, takie jak natywna aplikacja Mail. Jeśli działają w tle, zajmują pamięć, procesor lub skracają żywotność baterii
Aplikacje, które mogą działać w tle przez czas nieokreślony, mogą w trakcie działania robić wszystko, co robią, od odtwarzania muzyki po pobieranie nowych odcinków podcastów.
Jak wspomniałem wcześniej, użytkownik nigdy nie musi zamykać aplikacji działających w tle. Jedynym wyjątkiem jest sytuacja, gdy aplikacja działająca w tle ulega awarii lub nie budzi się prawidłowo ze stanu uśpienia. Użytkownik może wówczas zamknąć aplikacje ręcznie na pasku wielozadaniowości, jednak zdarza się to rzadko.
Ogólnie rzecz biorąc, nie musisz zarządzać procesami w tle, ponieważ system sam się nimi zajmie. Dlatego iOS jest tak świeżym i szybkim systemem.
Z perspektywy dewelopera
Aplikacja w ramach wielozadaniowości może reagować łącznie sześcioma różnymi stanami:
1. aplikacjaWillResignActive
W tłumaczeniu stan ten oznacza, że aplikacja w przyszłości (kwestia kilku milisekund) zrezygnuje z roli aplikacji aktywnej (czyli aplikacji znajdującej się na pierwszym planie). Dzieje się tak np. podczas odbierania połączenia podczas korzystania z aplikacji, ale jednocześnie metoda ta powoduje również taki stan zanim aplikacja przejdzie w tło, więc trzeba wziąć te zmiany pod uwagę. Ta metoda jest również odpowiednia, aby na przykład zawiesić wszystkie czynności, które wykonuje, gdy nadejdzie połączenie przychodzące i poczekać do zakończenia połączenia.
2. aplikacjaDidEnterTło
Status wskazuje, że aplikacja przeszła w tło. Programiści powinni używać tej metody, aby zawiesić wszystkie procesy, które niekoniecznie muszą działać w tle i wyczyścić pamięć z nieużywanych danych i innych procesów, takich jak wygasające liczniki czasu, usuwanie załadowanych obrazów z pamięci, które niekoniecznie będą potrzebne lub zamykanie połączenia z serwerami, chyba że dla aplikacji krytyczne jest nawiązywanie połączeń w tle. Kiedy metoda jest wywoływana w aplikacji, powinna w zasadzie służyć do całkowitego zawieszenia aplikacji, jeśli jakaś jej część nie musi działać w tle.
3. aplikacjaWillEnterForeground
Stan ten jest przeciwieństwem stanu pierwszego, w którym aplikacja przejdzie do stanu aktywnego. Stan oznacza po prostu, że aplikacja uśpiona zostanie wznowiona w tle i pojawi się na pierwszym planie w ciągu następnych kilku milisekund. programiści powinni użyć tej metody, aby wznowić wszelkie procesy, które były nieaktywne, gdy aplikacja działała w tle. Należy ponownie nawiązać połączenia z serwerami, zresetować liczniki czasu, załadować obrazy i dane do pamięci oraz inne niezbędne procesy można wznowić tuż przed ponownym zobaczeniem załadowanej aplikacji przez użytkownika.
4. aplikacjaDidBecomeActive
Stan wskazuje, że aplikacja właśnie została aktywowana po przywróceniu jej na pierwszy plan. Jest to metoda, za pomocą której można dokonać dodatkowych zmian w interfejsie użytkownika, przywrócić interfejs użytkownika do stanu pierwotnego itp. Dzieje się tak właściwie w momencie, gdy użytkownik widzi już aplikację na wyświetlaczu, dlatego konieczne jest określić ostrożnie, co dzieje się w metodzie tej i poprzedniej metody. Wywoływane są jeden po drugim z różnicą kilku milisekund.
5. aplikacja zostanie zakończona
Ten stan ma miejsce na kilka milisekund przed zamknięciem aplikacji, to znaczy przed faktycznym zakończeniem działania aplikacji. Albo ręcznie z poziomu wielozadaniowości, albo podczas wyłączania urządzenia. Metodę należy zastosować w celu zapisania przetworzonych danych, zakończenia wszystkich czynności i usunięcia danych, które nie będą już potrzebne.
6. applicationDidReceiveMemoryWarning
To ostatni stan jest najczęściej omawiany. Odpowiada za, w razie potrzeby, usunięcie aplikacji z pamięci iOS, jeśli niepotrzebnie zużywa ona zasoby systemowe. Nie wiem dokładnie, co iOS robi z aplikacjami działającymi w tle, ale jeśli potrzebuje aplikacji do zwalniania zasobów do innych procesów, wyświetla ostrzeżenie o pamięci, aby zwolnić wszystkie posiadane zasoby. Dlatego ta metoda jest wywoływana w aplikacji. Programiści powinni to zaimplementować tak, aby aplikacja zrezygnowała z przydzielonej jej pamięci, zapisała wszystko, co jest w toku, wyczyściła niepotrzebne dane z pamięci i w inny sposób odpowiednio zwolniła pamięć. Prawdą jest, że wielu programistów, nawet początkujących, nie myśli o takich rzeczach i nie rozumie ich, a wtedy może się zdarzyć, że ich aplikacja zagraża żywotności baterii i/lub niepotrzebnie zużywa zasoby systemowe, nawet w tle.
werdykt
Te sześć stanów i związane z nimi metody stanowią podstawę wszelkiej „wielozadaniowości” w iOS. to świetny system, pod warunkiem, że programiści nie ignorują faktu, że trzeba być odpowiedzialnym za to, co aplikacja wyrzuci na urządzenia użytkowników, jeśli zostaną one zminimalizowane lub otrzymają ostrzeżenia z systemu i tak dalej.
Źródło: Macworld.com
Autorski: Jakub Požárek, Martin Doubek (ArnieX)
Czy Ty też masz problem do rozwiązania? Potrzebujesz porady, a może szukasz odpowiedniej aplikacji? Zapraszamy do kontaktu poprzez formularz znajdujący się w dziale Doradztwo, następnym razem odpowiemy na Twoje pytanie.
Witam, naprawdę fajny artykuł, ale zastanawiam się, czy masz do niego jakieś wsparcie techniczne. Ponieważ wieczorem przed pójściem spać kilka razy rozwiązywałem akumulator i zdarzało się, że przy wyłączonym Wi-Fi i danych komórkowych trwało to dłużej niż w innym przypadku z wyłączonym Wi-Fi i tylko 3G.
Niestety doświadczenie jest takie, że w iOS aplikacje trzeba wyłączać ręcznie, a system nie działa już tak dobrze, jak wcześniej.
Wymieniłem iPhone'a na Windows Phone (Samsung Omnia W za 6200,-) i szybkość działania systemu jest na zupełnie innym poziomie.
Boję się, że gdy wyjdą tablety Metro z Windowsem 8, to wymienię też iPada…
@007 – tak, jeśli porównujesz stare iPhone3G z nowymi WP, to tak (kto by się tego spodziewał?) WP będzie sporo szybszy. W przeciwnym razie plotki o Karlulce nie pasują do Ciebie i wypadałoby porównać obecny HW. Kupiłem też WP7 i ostatecznie skończyłem na 4s, co reprezentuje zupełnie inny poziom użyteczności niż WP7. Przejdź więc przyjemnie i bez końca przewijaj kafelki.
Całkowicie zgadzam się z Pają
Dołożyłbym jeszcze raz gruz z innej beczki - Samsunga Galaxy S i iPhone'a 4 - powiedziałbym, że porównywalny pod względem wieku? W czasach iOS 4, pod względem użyteczności i szybkości gdzieś indziej niż Android, Apple bardzo dobrze rozwiązał koncepcję pracy z aplikacjami, ale to samo nie jest już prawdą w przypadku Androida. Ostatecznie i tak skończyłem z 4S i nie mam żadnych zastrzeżeń, bo „po prostu działa”… i to działa bardzo szybko!
Teoria jest piękna... Ale w praktyce i tak zamykam aplikację w pasku ;)
Dzięki, bardzo ciekawe, pragmatyczne, ciekawe, nie brakuje w nim rozmachu i głębi. Wyraźnie podkreślające obsesję współczesnej młodzieży na punkcie tej zakazanej marki! Ale dziękuję za nią i za ten artykuł.
Artykuł jest całkowicie błędny.
Aplikacja nie zamyka się po naciśnięciu przycisku Home, jak błędnie stwierdzono, ale zatrzymuje się. Tj. zdecydowanie nie usuwaj z pamięci i nie rezygnuj. Po prostu wstrzymaj działanie, iOS da tej aplikacji 0% czasu procesora. Zdecydowanie nie „zamienia” nigdzie w pamięci iDevice, jak stwierdzono w artykule. Dzieje się tak naprawdę dzięki temu, że istnieje możliwość korzystania z przełączania aplikacji.
Aplikacja jest usuwana z pamięci, gdy w telefonie jest mało pamięci, aby uruchomić inne aplikacje o wyższym priorytecie (zwykle na pierwszym planie działa inna aplikacja).
W pierwszym przypadku masz rację, był to błąd w tłumaczeniu. Jeśli chodzi o wymianę, nie mówimy tutaj o tym, mówimy o pamięci operacyjnej, a nie o przestrzeni dyskowej w urządzeniu iOS.
obraz aplikacji jest przechowywany w pamięci przez ograniczony czas, aż do ponownego wywołania poleceniem (patrz 13,7 GB z 16 GB: 2,3 GB jest zarezerwowane dla systemu i zawieszonych aplikacji)
Tym samym konieczne jest rozróżnienie między aplikacjami takimi jak Nawigacja, Skype i tym podobne, aplikacje te pozostają aktywne nawet w tle, czy też dana funkcja nie kończy się i kontynuuje na przykład wysyłanie danych o swojej lokalizacji lub informacji o lokalizacji. Lub jak Vokul w trybie Pord, słuchaj, a wielozadaniowość nadal słucha w tle.
Aplikacje te zużywają baterię i należy je zamknąć ręcznie, a nie czekać na iOS. w przypadku innych nie jest to konieczne, tam tylko w przypadku awarii aplikacji.
Nie mogę zgodzić się z artykułem. Min. na iPadzie pierwszej generacji (iOS 1) wyraźnie widać, czy na pasku wielozadaniowości mam dużo „otwartych” aplikacji, czy tylko kilka. iOS stara się czyścić pamięć, ale to oczywiście nie wystarcza – mały rozmiar pamięci RAM to chyba jego największa słabość.
więc dużo zależy od systemu i użytego sprzętu, całkiem logiczne jest, że na iPadzie 1 z iOS 5.0.1 będzie gorzej niż gdyby było na iPadzie 2. generacji
Przepraszam kolego, to jest opis IDEALNEGO sposobu, w jaki to powinno działać. Niestety rzeczywistość jest zupełnie inna i wiedziałbyś o tym, gdybyś korzystał z produktów Apple, przynajmniej tak często jak ja (tj. okazjonalnie).
„Często można usłyszeć przesądy, że aplikacje działające w tle w iOS zapełniają pamięć operacyjną”
To nie przesąd, to po prostu fakt. W końcu sam to twierdzisz w artykule.
„Jak wspomniałem wcześniej, użytkownik nigdy nie musi zamykać aplikacji działających w tle.”
NONSENS. To tylko bzdury, propaganda jabłek, nie złość się na mnie.
„Ale nie musisz tego robić, ponieważ iOS zrobi to za Ciebie. Jeśli masz wymagającą aplikację zawieszoną w tle, na przykład grę zużywającą dużą ilość pamięci RAM, iOS automatycznie usunie ją z pamięci, jeśli zajdzie taka potrzeba, i będziesz mógł ją ponownie uruchomić, dotykając ikony aplikacji.
Nie prawda. Sytuacja jest trochę inna. Typowy przykład – w tle działają wymagające aplikacje, potrzebuję gier. Uruchamiam przeglądarkę, otwieram kilka kart -> potrzebuję więcej pamięci. Co się stanie? Ciągle żądam aplikacji w tle, wręcz przeciwnie, PRZEGLĄDARKA SAMA SPADA. Jeśli ręcznie zamknę wymagające aplikacje, przeglądarka działa długo bez żadnych problemów.
To jest praktyka, nie teoria. I dziwię się, że jako wieloletni użytkownik produktu Apple, nadal tego nie wiesz.
Dziękuję, jest to bardzo dobrze opisane i dobrze wyjaśnione. Bardzo mi pomogłeś ;-) ♥
Gwoli wstępu, nie jestem ani za, ani przeciw iOS, podobnie jak w przypadku Androida, ale jest tu kilka dziwnych rzeczy, jeśli tak jak jest tu napisane: „rzadko zdarza się awaria aplikacji na iOS”, to na Androidzie, aplikacje prawdopodobnie zawieszają się raz na rok: -P
http://dotekomanie.blog.mobilmania.cz/2012/02/stabilita-ios-vs-android/
Tak, ale przypadki, w których trzeba zamknąć aplikację ręcznie, są naprawdę minimalne. Użyłem tego mniej więcej raz? ;-) i podawanie linku do testu porównawczego z Mobilemanii jest zupełnie bez sensu, jak będę chciał przeczytać o reklamach, które Google zapłacił, to tam zajrzę ;-) każdy może dostać w swoje ręce dowolny telefon z Androidem i to nie będzie działać czysto, to znaczy z wyjątkiem Galaxy Nexusa, na którym system jest mniej więcej szyty na miarę. Ogólnie android to porażka
@Mek – Od kilku lat na co dzień używam produktów Apple i nigdy mi się to nie zdarzyło, więc Twoja teoria jakoś się nie sprawdza.
OT:
@redakce – Widać, że strona cały czas jest rozwijana, coś się z nią dzieje, ale mam wrażenie, że nie trzeba tygodnia, żeby wszystko działało tak, jak powinno. I właściwie już tu nie przychodzę, bo nowy wygląd mi nie odpowiada. Przynajmniej korzystałem z wersji mobilnej na iPhone'a, ale teraz w ogóle nie działa - jak to się stało? Obecnie nie odpowiadają na posty w komentarzach.
@SteveJSF Niestety, sprawy nie zawsze układają się tak, jak tego chcemy. Jeśli chodzi o odpowiedzi, nowa wtyczka SEO je zepsuła, obecnie jest to rozwiązywane.
WP-Touch również z jakiegoś powodu zakończył naszą usługę, więc postanowiliśmy wymyślić lepsze rozwiązanie niż ta wtyczka. Zatem już wkrótce możecie spodziewać się kolejnych nowości :-)
Niezły artykuł. Jeśli chodzi o praktykę, to chciałbym powiedzieć, że z kilkoma rzeczami się zgodzę i w większości przypadków działa tak, jak podano, ale niestety nadal zdarzają się źle napisane aplikacje, które nie zachowują się poprawnie, i zdarzają się przypadki takie jak ten zauważyła część czytelników. Myślę, że Skype jest bardzo dobrym przykładem, wiem z praktyki, że nadal działa w tle (i jest dobrze i tak powinno być), ale problem jest taki, że ta aplikacja bardzo zużywa baterię urządzenia i Nie widzę już tego dokładnie. Z kolei aplikacje takie jak Facebook, Badoo itp. też nadal działają w tle, ale ich zużycie jest prawie niezauważalne (przynajmniej ja ich nie zauważam). Myślę więc, że błąd leży w poszczególnych aplikacjach. Gdybyś wiedział które, wystarczyłoby ręcznie wyłączyć tylko te!
Praktyka jest więc taka, że Facebook działa w razie potrzeby, a Skype tylko wtedy, gdy jest to potrzebne.
No cóż, z drugiej strony, jeśli muszę oszczędzać baterię i wiem, że muszę utrzymać iPhone'a „przy życiu” jak najdłużej, to też wyłączam wszystko, co niepotrzebne w wielozadaniowości, ale przeważnie nie ma to dużego wpływu, ale w razie potrzeby ograniczam 3G, cały internet mobilny, WiFi, usługi lokalizacyjne, tryb samolotowy, siłę oświetlenia itp. W ramach rutyny wyłączam też wyżej wymienione aplikacje w wielozadaniowości.
Więc osobiście uważam, że artykuł jest prawdziwy, niestety niektórzy programiści obalają te rzeczy swoimi aplikacjami, ponieważ ich aplikacje są nieprawidłowe i moim zdaniem są na to tylko dwa rozwiązania 1. Jeśli nie można korzystać z aplikacji i znaleźć alternatywa jeśli to możliwe, lub 2. Jeśli nie jest to możliwe, zobacz np. Skype, napisz to do danego programisty w raporcie i miej nadzieję, że coś z tym zrobi.
Ręczne wyłączanie aplikacji może nie mieć sensu, ale i tak to robię. Starałem się też nie wyłączać systemu aplikacji, pozwolić im działać (lub zostawić je uśpione w tle) i żywotność baterii była znacznie niższa, konieczne było także ponowne uruchomienie iPada 2 po około trzech tygodniach, reagował powoli. Wyłączam więc aplikacje ręcznie, bateria trzyma dłużej, niedawno uruchomiłem ponownie komputer w Boże Narodzenie i wszystko działa dobrze.
Swoją drogą, robię to samo w Mac OS X, po prostu zamykam niepotrzebną mi aplikację (CMD+Q), to lepsze niż uśpienie jej w tle i niepotrzebnie zżerać RAM (co OS X potrafi nie współpracuje się zbyt dobrze). Mam mało RAMu, tylko 8 GB, ale w Windows 7 z 8 GB system nie reagował wolno ani nie zamieniał się, w OS X jest to dość powszechne zjawisko (nigdy nie wyłączałem komputera, robię to też z Macem, więc miesiąc i więcej czasu nie jest wyjątkiem, problem polega na tym, że czasami muszę ponownie uruchomić komputer Mac, aby zwolnić pamięć RAM i „przyspieszyć”, Windows 7 tego nie potrzebuje).
Bardziej interesuje mnie, jak faktycznie wysadzić aplikację. Przydarzyło mi się, że aplikacja (szczególnie w Geocachingu) weszła w stan, w którym ładowała coś z serwera nadrzędnego i utknęła w tym stanie. Przycisk Home zadziałał, po ponownym uruchomieniu powrócił do stanu zamrożenia (w miejscu, w którym przerwałem). Ręczne wyjście (do menu multitastingu przytrzymaj ikonę i minus, aby zamknąć) = aplikacja zniknęła, po ponownym uruchomieniu otworzyła się w oryginalnym stanie, w którym się zawiesiła. Zamknąłem więc wszystko, wyłączyłem telefon, włączyłem go, dwukrotnie kliknąłem HOME i oto – wszystkie aplikacje były tam, jak przed zamknięciem tuż przed wyłączeniem. Ponowne uruchomienie też nie pomogło - trzymaj w domu i na górze, aż zrobi się gorąco. Jedyne co pomogło to usunięcie aplikacji z telefonu, ponowne uruchomienie i ponowna instalacja na telefonie. Jakoś tego nie przyjąłem.
To wielozadaniowe zarządzanie działa i od programistów zależy, czy poradzą sobie z takimi sytuacjami. Dla zainteresowanych bardziej szczegółowym i profesjonalnym opisem całej sytuacji napiszę tutaj jak to jest.
Aplikacja może reagować łącznie na 6 stanów i są to stany:
aplikacjaWillResignActive
aplikacjaDidEnterTło
applicationWillEnterForeground
aplikacjaDidBecomeActive
aplikacja zostanie zakończona
applicationDidReceiveMemoryWarning
Teraz postaram się opisać te stany bardziej szczegółowo.
applicationWillResignActive – stan ten oznacza, że w przyszłości (w ciągu kilku milisekund) aplikacja zrezygnuje z roli aplikacji aktywnej (czyli aplikacji na pierwszym planie) dzieje się tak np. podczas odbierania połączenia podczas korzystania z aplikacji, ale jednocześnie jest to method dlatego stan ten zostanie wywołany jeszcze zanim aplikacja przejdzie w tło, dlatego należy wziąć te zmiany pod uwagę. Ta metoda jest również odpowiednia, aby na przykład zawiesić wszystkie czynności, które wykonuje, gdy nadejdzie połączenie przychodzące i poczekać do zakończenia połączenia.
applicationDidEnterBackground - ten status wskazuje, że aplikacja przeszła w tło, programiści powinni skorzystać z tej metody, aby zawiesić wszystkie procesy, które niekoniecznie muszą działać w tle i wyczyścić pamięć z nieużywanych danych i innych procesów, np. wygasnąć timery, wyczyścić z obrazów załadowanych w pamięci, które niekoniecznie będą potrzebne lub zakończyć połączenie z serwerami, jeśli zakończenie połączenia w tle nie jest krytyczne dla aplikacji. Zasadniczo tę metodę po wywołaniu w aplikacji należy zastosować do całkowitego zawieszenia aplikacji, jeśli jakaś jej część nie musi działać w tle.
applicationWillEnterForeground – stan ten jest przeciwieństwem pierwszego stanu, gdy aplikacja przejdzie do stanu aktywnego. Ten stan aplikacji oznacza po prostu, że w ciągu następnych kilku milisekund uśpiona aplikacja wznowi pracę w tle i pojawi się na pierwszym planie (aplikacja przejdzie na pierwszy plan). Ta metoda powinna być używana przez programistów w celu wznowienia wszelkich procesów, które były nieaktywne, gdy aplikacja była w tle należy ponownie nawiązać połączenia z serwerami, zresetować timery, załadować obrazy i dane do pamięci oraz inne niezbędne procesy mogą zostać wznowione tuż przed ponownym zobaczeniem załadowanej aplikacji przez użytkownika.
applicationDidBecomeActive – status ten wskazuje, że aplikacja właśnie stała się aktywna po przywróceniu jej na pierwszy plan, jest to metoda, którą można zastosować w celu wprowadzenia dodatkowych poprawek w interfejsie użytkownika lub przywrócenia interfejsu użytkownika do stanu pierwotnego itp. ta metoda faktycznie ma miejsce kiedy użytkownik widzi już na wyświetlaczu, należy więc z bilansu ustalić, co się dzieje w tej metodzie i w poprzedniej metodzie. Wywoływane są jeden po drugim z różnicą kilku milisekund.
applicationWillTerminate — ten stan ma miejsce kilka milisekund przed zakończeniem aplikacji, czyli zanim aplikacja faktycznie się zakończy. Albo ręcznie z poziomu wielozadaniowości, albo podczas wyłączania urządzenia. Metodą tą należy posłużyć się do zapisania przetworzonych danych oraz do zakończenia wszelkich czynności i usunięcia danych, które nie będą już potrzebne.
applicationDidReceiveMemoryWarning – i jest to warunek, który jest tutaj szeroko omawiany, w razie potrzeby iOS usunie aplikację z pamięci, jeśli niepotrzebnie zużywa zasoby systemowe. Nie wiem dokładnie, co iOS robi z aplikacjami działającymi w tle, ale jeśli potrzebuje aplikacji do zwolnienia zasobów dla innych procesów, wyświetla ostrzeżenie dotyczące pamięci, aby zwolnić przechowywane zasoby. Więc ta metoda jest wywoływana w aplikacji i programiści powinni ją zaimplementować, aby aplikacja oddała posiadaną pamięć, zapisała przetworzone i usunęła niepotrzebne dane z pamięci, a w inny sposób odpowiednio zwolniła pamięć. Prawdą jest, że wielu programistów, na przykład początkujących, nie myśli o takich rzeczach lub ich nie rozumie, a wtedy może się zdarzyć, że ich aplikacja zagraża żywotności baterii i/lub niepotrzebnie zużywa zasoby systemowe nawet w tle. Nie wiem, jak zachowa się iOS, jeśli aplikacja po otrzymaniu ostrzeżenia o pamięci nic nie zrobi i nadal będzie zużywać zasoby systemowe tak jak wcześniej.
Te kilka stanów i powiązanych z nimi metod stoi za całą „wielozadaniowością” w iOS… to świetny system, jeśli programiści nie ignorują konieczności ponoszenia odpowiedzialności za to, co aplikacje wyrzucą na urządzenia swoich użytkowników, jeśli zostaną zminimalizowane lub uzyskaj ostrzeżenia z systemu i nie tylko…
Mam nadzieję, że ten krótki opis pomoże Ci zrozumieć, w jaki sposób aplikacja przyczynia się do sprawnego działania wszystkiego. Można więc niemal powiedzieć, że jest to błąd polegający na nieprawidłowym użytkowaniu przez użytkownika, co można rozumieć w ten sposób, że jeśli w dużej liczbie korzystasz głównie z darmowych aplikacji od amatorskich programistów, Twoje urządzenie z systemem iOS będzie działać gorzej niż w przypadku korzystania z dużego liczba bezpłatnych i płatnych aplikacji od doświadczonych lub profesjonalnych programistów. Nie oznacza to, że w obu kręgach nie ma wyjątków. Na przykład Foursquare zachowuje się dość dziwnie i wymagająco, a jednocześnie można by się spodziewać, że są to bardzo utalentowani programiści, którzy poświęcają dużo czasu na zarządzanie pamięcią i baterią, ale jest odwrotnie. Największym problemem 4SQ jest komunikacja z serwerami, która często się zawiesza i jest przeciążona. To tylko przykład na to, że nawet znane aplikacje mają problemy, co nie zmienia faktu, że 4SQ to świetna usługa.
Miłej zabawy Jabłka!! :)
Dodaliśmy tę informację do artykułu za zgodą autora ;-)
Przepraszam, ENTER był wszędzie pomiędzy akapitami, mogliby coś z tym zrobić tutaj, żeby komentarze miały choć trochę FORMATOWANIA TEKSTOWEGO.
ArnieX: dzięki za komentarz!!
Że Faramir: Chodzi mi właśnie o Twój problem, nie wiem czy w Twoim przypadku pomoże, ale z własnego doświadczenia wiem, że jeśli zamkniesz aplikację (w trybie wielozadaniowości) to potrzeba kilku sekund zanim się zamknie, więc jeśli wyłączasz, radzę odczekać kilka sekund (ja dla pewności czekam ok. 10 sekund), aż definitywnie się skończy i dopiero wtedy uruchamiam ponownie.
Nie ma za co ;) Chętnie pomogę, jeśli będę miał możliwość wniesienia swojego wkładu.
Jak to ma być z Meebem, gdy loguję się przez niego do ICQ lub chatu na FB, to po 10 minutach automatycznie się wylogowuje i przechodzę do trybu offline czy dalej działa? dzięki za wyjaśnienie:P
Po dziesięciu minutach połączenie aplikacji z Internetem zostaje po prostu przerwane. Jednak nadal będziesz online na serwerze Meeba i otrzymasz powiadomienie push, jeśli ktoś do Ciebie napisze. Po ponownym otwarciu aplikacji, połączenie zostanie nawiązane za chwilę i będziesz mógł kontynuować rozmowę.
Tak więc, jeśli dobrze zrozumiałem artykuł, który zalinkowałeś, statystyki odnoszą się tylko do awarii aplikacji podczas ich uruchamiania, co stanowi dość niewielki odsetek przypadków, w których może wystąpić awaria. Nie da się więc z tego „badania” wyciągnąć wniosku, że iOS jest moim zdaniem mniej stabilny. Ponadto tłumacz artykułu zaczerpniętego z Forbesa zapomniał wspomnieć, że firmę dostarczającą dane o awariach aplikacji wspiera m.in. Google („Crittercism, który jest wspierany przez Google Ventures…”).