Jak naprawdę działa multitasking w iOS?

Jak naprawdę działa multitasking w iOS?

Multitasking iOS
Multitasking iOS
Krystian Bezdzietny
02.12.2012 11:00, aktualizacja: 02.12.2012 12:00

Nie raz może spotkałeś się z negatywnymi opiniami na temat wielozadaniowości iOS-a, w których zarzuca się Apple’owi, że mechanizm ten jest nieudolny i wymaga poprawy. Mimo to inżynierowie z Cupertino nic sobie z tego nie robią, a multitasking pozostaje niezmienny. Dlaczego?

Otóż multitasking i zarządzanie działającymi w tle aplikacjami w systemie Apple'a (podobnie jak w Androidzie czy Windows Phone) są bardziej "inteligentne" niż może się wydawać na pierwszy rzut oka. iOS może nie pozwala na pełne działanie otwartych w tle programów, ale są od tej reguły wyjątki. Zasadnicze pytanie brzmi: dlaczego po naciśnięciu przycisku Home aktualnie używania aplikacja znika z ekranu, nie działa w tle (o czym przekonujesz się po jej ponownym włączeniu), a mimo to zużywa pamięć RAM?

[solr id="komorkomania-pl-137364" excerpt="0" image="0" words="20" _url="http://michalmynarski.komorkomania.pl/4959,przyszlosc-here-na-ios-maluje-sie-w-ponurych-barwach" _mphoto="nokia-here-ios-137364-25-315dd94.jpg"][/solr][block src="solr" position="inside"]3098[/block]

Dzieje się tak dlatego, że została ona zawieszona. W przypadku multitaskingu iOS-a należy wyróżnić bowiem aż pięć stanów działania aplikacji (system automatycznie nimi zarządza w zależności od interakcji użytkownika):

  • Not running (niedziałająca) - działanie aplikacji zostało zakończone lub nie była ona uruchomiona;
  • Inactive (nieaktywna) - aplikacja jest wyświetlona na pierwszym planie, ale nie odbiera akcji (np. urządzenie zostanie zablokowane podczas jej używania);
  • Active (aktywna) - aplikacja w pełni funkcjonuje, jest wyświetlona;
  • Background (w tle) - aplikacja nie jest wyświetlona, ale wciąż przetwarza kod;
  • Suspended (zawieszona) - aplikacja jest wciąż obecna w pamięci, ale nie przetwarza kodu.

Gdy program jest więc zawieszony system nie poświęca na wykonywanie jego kodu mocy obliczeniowej (aplikacja nie pobiera energii), a pamięć RAM jest zajęta po to, aby w razie ponownego uruchomienia programu iOS natychmiastowo powrócił do używanej wcześniej zawartości.

Gdy takich „zawieszonych” aplikacji się uzbiera i pojawi się zapotrzebowanie na pamięć dla nowo uruchamianego programu, to iPhone automatycznie wyłączy aplikacje zawieszone (przejście do niedziałającej) w kolejności od najdawniej używanej. Istnieją jednak pewne wyjątki.

Zawieszanie po wykonaniu określonego zadania

Po zamknięciu aplikacji jej kod jest przetwarzany mniej więcej przez pięć sekund, a następnie jest ona zawieszana. Deweloper może jednak zastrzec, aby zawieszenie nie następowało od razu po naciśnięciu Home’a, ale dopiero wtedy, gdy aplikacja wykona jakieś zadanie. Nie może to jednak trwać dłużej niż 10 minut.

[solr id="komorkomania-pl-137437" excerpt="0" image="0" words="20" _url="http://komorkomania.pl/4974,patent-na-cyfrowe-przewijanie-stron-w-rekach-applea" _mphoto="img-2603-137437-252x168-86bc6f50.jpg"][/solr][block src="solr" position="inside"]3099[/block]

Przykładowo aplikacja służy pobieraniu muzyki. Deweloper w tym przypadku może określić, aby jego program po wyjściu nie był od razu zawieszany, lecz dopiero wtedy gdy np. pobierze jakiś utwór.

 Nieprzerwane działanie w tle

  • aplikacje** odtwarzające dźwięk,** np. aplikacje umożliwiające strumieniowe odtwarzanie radia;
  • aplikacje korzystające z danych lokalizacji, np. ciągle kierująca nas nawigacja (aplikacja jest w pełni aktywna będąc zminimalizowaną);
  • aplikacje VoIP, np. Skype (program działając w tle będzie informował o przychodzących połączeniach);
  • aplikacje pokroju Kiosku, które automatycznie aktualizują swoją zawartość;
  • aplikacje otrzymujące komunikaty od zewnętrznych akcesoriów.

Gdy aplikacja z ww. grupy zostanie uruchomiona, system będzie przeznaczał na jej działanie nie tylko pamięć RAM, ale też procesor i energię. Są to jedyne przypadki gdzie użytkownik sam musi wyłączyć program aby odzyskać niepotrzebnie poświęcaną na jego działanie pamięć RAM.

[solr id="komorkomania-pl-137181" excerpt="0" image="0" words="20" _url="http://komorkomania.pl/4978,aplikacja-filmweb-spelnia-oczekiwania-polskich-uzytkownikow" _mphoto="img-2592-137181-175x168-1a2ad960.jpg"][/solr][block src="solr" position="inside"]3100[/block]

Co ciekawe, jeśli deweloper planuje, aby jego aplikacja wykonywała działanie w tle, to podczas udostępniania jej w App Store musi określić odpowiednią zmienną w pliku konfiguracyjnym zgłaszanej pozycji. Dzięki temu pracownicy Apple'a będą znali zamiar dewelopera, a następnie sprawdzą działanie aplikacji w celu wykrycia potencjalnych nadużyć.

Paradoks paska multitaskingu

Wbrew powszechnemu przekonaniu zadaniem paska multitaskingu nie jest wyświetlanie aplikacji działających w tle. Otóż ma on służyć informowaniu użytkownika o wszystkich ostatnio uruchomionych programach, bez znaczenia w jakim stanie one występują. Warto zauważyć, że na pasku nie znajdziesz ikony aplikacji aktywnej.

Reasumując, użytkownicy wcale nie muszą ręcznie wyłączać działających w tle aplikacji, ponieważ iOS robi to sam. Wbrew powszechnej opinii większa liczba uruchomionych aplikacji wcale nie musi zwiększać zużycia energii, czego obawia się wielu użytkowników. Mimo zarzutów, że multitasking w iPhone'ie nie ma nic wspólnego z tym z MeeGo czy Symbiana, to w żaden sposób nie jest gorszy niż rozwiązanie (całkiem podobne zresztą) z Androida, gdzie także sam system zarządza aplikacjami w tle.

Źródło: speirs

Źródło artykułu:WP Komórkomania
Oceń jakość naszego artykułuTwoja opinia pozwala nam tworzyć lepsze treści.
Wybrane dla Ciebie
Komentarze (0)