Zamknij reklame

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.

.