Gyakori kérdések: hogyan működik iOS-en a multitasking?

Ez a cikk legalább 1 éve frissült utoljára. A benne szereplő információk a megjelenés idején pontosak voltak, de mára elavultak lehetnek.

Az Apple a 4.0-ban mutatta be az iOS rendszerre a multitaskingot, aminek segítségével több alkalmazás futtatható egyidőben a készüléken, és ezek között a Home gomb dupla lenyomásával megjelenő lista segítségével váltogathatunk. Például a számítógépünkön is egyszerre futhat a böngésző, egy szövegszerkesztő, és zenét hallgathatunk, vagy beszélhetünk valakivel még Skype-on is. Ha nem lenne multitasking, egyszerre csak egy alkalmazás működne, tehát ha épp Skype-on beszélnénk valakivel, akkor közben nem böngészhetnénk, vagy nem írhatnánk a szöveget tovább a Wordben, és persze a zenelejátszás is azonnal megszakadna.

iOS esetén ez kicsit másképp működik, tehát ne a fenti, “klasszikus” multitaskingot képzeljük el, hiszen az sokkal több erőforrást használ fel: memóriát, processzoridőt, és persze akkumulátort.

Mivel a legtöbb alkalmazás csak egy adott feladat miatt kell, hogy fusson a háttérben, miközben a rendszer legtöbb erőforrását valójában nem használja, így azokat nem is kell számára lefoglalni. Az iPod például csak zenelejátszást végez, így számára felesleges, hogy mondjuk használja a helymeghatározást, vagy a push értesítéseket, hiszen nincs is ilyen funkciója. Ennek a megoldásnak a segítségével a mobileszközök korlátozott erőforrásaival is könnyebb gazdálkodni.

Az iOS esetén ezért a multitasking kezelését hét különféle API-ra bontották szét, amelyeket a fejlesztők felhasználhatnak, akár egymással kombinálva is, ha az alkalmazásaikat multitasking képességgel szeretnék ellátni.

Hét API

1. Background Audio – Audiolejátszás a háttérben

A Background audio nem volt valójában új funkció, amikor az iOS 4.0 megjelent. Már azóta létező funkció volt, amióta a legelső iPhone megjelent, hiszen az iPod appból kilépve a zenelejátszás nem állt meg. Az újdonság itt az volt, hogy a fejlesztők is kaptak ehhez az API-hoz hozzáférést. Leegyszerűsítve ez arra jó, hogy a zenelejátszó alkalmazások továbbra is folytathassák a háttérben a lejátszást, anélkül, hogy processzoridőt vonnának el olyan feladatokra, amikre ilyenkor nincs is szükségük. Például nem fogják frissíteni az éppen játszott szám borítóját, vagy nem fogják kirajzolni a kezelőfelületet, hiszen azt úgysem látnád. Ilyenkor csak a zenelejátszásra használnak erőforrást.

2. Voice Over IP – “Internettelefon”

A VOIP alkalmazások a fentiekhez hasonlóan működnek, azzal a különbséggel, hogy a VOIP működéséhez internetkapcsolat is szükséges. Így az ezt támogató alkalmazások a Home gomb lenyomása után továbbra is online állapotúnak fognak mutatni, és fogadhatják a beérkező hívásokat is. Ezen felül a legtöbb VOIP alkalmazás még ennél is tovább megy: push értesítésekre hagyatkozik, így ha az alkalmazás tényleg csak “csücsül” magában a háttérben, de nincs épp aktív hívás folyamatban, akkor átválthat kizárólag push-ra is, amivel még kevesebb erőforrást használ. A push meg egyébként is aktív, és ahhoz még multitasking, tehát az alkalmazás háttérben való futása sem szükséges. (Ez utóbbira jó példa a Skype, mert az a multitaskingot nem támogató rendszereken push segítségével értesít a hívásokról/üzenetekről, miközben maga az app nem is fut. A Skype egyébként épp egy olyan app, ami jelenleg nem kezeli ezt megfelelően, és multitaskingot támogató rendszereken akkor is feleslegesen forgalmazhat a háttérben, amikor már nem lenne rá szükség. Így érdemes lehet kilőni, mert másképp hajlamos a készülék hamarabb lemerülni a Skype miatt. Remélhetőleg ezt hamarosan javítják a Skype fejlesztői.)

3. Location Services – Helymeghatározás

A helymeghatározás háttérben futása azt teszi lehetővé, hogy az appok a háttérben is hozzá tudjanak férni a helyzetedhez. Így például az iOS5-ben debütáló helyzetfüggő emlékeztető jelezni tud neked, hogy megérkeztél a bolthoz, és itt a bevásárlólista. A helymeghatározás tényét az iOS a képernyő jobb felső sarkában egy kis nyíllal jelzi is, így láthatod, hogy valami a háttérben épp hozzáfér a helyzetedhez. Mivel az app a háttérben fut, így itt sincs szükség arra, hogy mondjuk kirajzolja, és folyamatosan frissítse a helyzeted egy térképen, amivel sok memória és processzorhasználat spórolható meg. Persze a GPS-chipset működése igényel energiát, illetve egyes alkalmazásoknak még néha internet is szükséges lehet, de ez lényegesen kevesebb, mintha az app aktívan futna.

4. Push Notifications – Push értesítések

A Push értesítések segítségével az alkalmazások úgy fogadhatnak értesítéseket, hogy nem kell futniuk hozzá a háttérben. Erre az iOS-ben egy központi szolgáltatás, úgynevezett daemon fut, ami rendszerszinten kezeli az értesítéseket. A push-t támogató alkalmazások ezen a daemon-on keresztül kapják meg az értesítéseket, így több alkalmazás esetén is csak ez az egyetlen daemon fut, jelentősen csökkentve a szükséges erőforrásokat. A push szinte folyamatos kapcsolatot tart fent az Apple push-t kiszolgáló szerverével, így noha a felhasznált erőforrásokból jelentősen kevesebbre van szüksége (például 10 app helyett csak 1 daemon), a folyamatos internetkapcsolat miatt a készülék készenléti idejét sajnos mégis alaposan csökkentheti (akár a felére is).

5. Local Notifications – Helyi értesítések

Működésében hasonlít a push értesítésekhez, azzal a különbséggel, hogy az értesítésekhez önmagukban itt nem szükséges internetkapcsolat. Leegyszerűsítve ez úgy működik, hogy az adott app megmondja az iOS-nek, hogy a felhasználó által beállított időpontban jelenítse meg a megadott értesítést. Az iOS Óra alkalmazása is gyakorlatilag a helyi értesítések segítségével ébreszt fel minket reggel, a beállított időpontban, vagy például a naptárfunkció értesítői is hasonló módon működnek.

6. Task Completion – Feladatok befejezése

A feladatok befejezése lehetővé teszi, hogy az app csak akkor lépjen ki teljesen, ha az épp futó folyamat, például egy le- vagy feltöltés befejeződött. Így például ha épp Flickr-re töltesz fel képeket, de bejön egy Skype hívás, akkor a feltöltés nem szakad meg, noha átváltasz a Skype hívásra. A feladatok befejezésére szánt idő korlátozott, így az app ez idő alatt vagy végez a feltöltéssel, vagy felfüggesztésre kerül, és a feltöltés megszakad. Épp ezért a nagymennyiségű adatot kezelő alkalmazások általában Wi-Fi hálózaton engedélyezik csak ezt, mert ott legtöbb esetben hamarabb befejeződik a folyamat, minthogy a megszabott idő lejárna.

7. Fast App Switching – Gyors váltás az appok között

Az egész multitaskingnak semmi értelme nem lenne, ha az alkalmazások közti váltás nehézkes és hosszú időt igénybe vevő lenne. Ez az API tehát arra jó, hogy amikor két alkalmazás közt váltasz, a rendszer az első alkalmazás adatait gyorsan a memóriába írja, majd kilépteti, és közben már a másik alkalmazás adatait tölti onnan vissza. Persze ha nagy memóriaigényű alkalmazásokat is használsz, a rendszer intelligensen kilövi azokat az appokat a memóriából, amelyeket régen használtál, így felszabadítja az általuk elfoglalt memóriát.

Hogyan kell használni?

Maga a multitasking automatikusan működik, ha az adott alkalmazás támogatja azt. Felhasználóként nincs semmi teendő, alapból minden fut a háttérben egy bizonyos szintig. Amely alkalmazások nem támogatják a fenti 7 API egyikét sem, azok ugyan szerepelni fognak a multitasking listában, de ettől ezek még kilépéskor teljesen ki is lépnek, és nem foglalnak helyet a memóriában.

A rendszer csak azokat az alkalmazásokat futtatja tovább (és azok esetén is csak a megfelelő módon), amelyekben a fejlesztő engedélyezte a fenti 7 API valamelyikét. Ezek az alkalmazások az adott funkciójukkal tehát egy darabig futhatnak a háttérben továbbra is, de ha már nincs szükség rájuk, a rendszer ezeket is bezárja, ha szükséges.

Az alkalmazások közötti váltáshoz egyszerűen nyomjuk le kétszer egymás után a Home gombot, ekkor a kijelző alsó sorában előbukkan a korábban használt alkalmazások listája, amelyek közül persze nem mindegyik fut ténylegesen. Az ikonokat jobbra-balra húzhatjuk, így keresve meg a szükséges appot, amelyre rányomva az előtérbe kerül, és folytathajuk benne azt, amit félbehagytunk a kilépésekor. Vagy az ikonokra hosszan nyomva akár ki is lőhetjük azt, ami már nem szükséges:

Kell-e nekem tenni bármit?

Az iOS esetén a multitasking úgy van kitalálva, hogy a felhasználónak ne kelljen foglalkozni a dolgok hátterével, ne neki kelljen karbantartani a rendelkezésre álló memóriát, ezt oldja meg a rendszer automatikusan. Felmerülhet viszont a kérdés, hogy szükséges-e kilőni az appokat a háttérből, vagy nem kell velük foglalkozni.

Ebben igazából megoszlanak a tapasztalatok. Sokan azt mondják, érdemes őket kilőni, mert az memóriát szabadít fel, amire pedig bármikor szükség lehet. Ez ebben a formában végülis igaz.

Ugyanakkor egy app kilövése lelassítja annak következő indítását, így akkor több erőforrást használ fel az app újraindításához a rendszer, mintha hagytuk volna futni a háttérben. A memóriát pedig a rendszer intelligensen kezeli, így legtöbbször nem fordulhat elő olyan helyzet, amikor a készülék érezhetően belassulna.

Abban az esetben viszont, ha mégis ilyen lassulást tapasztalunk, érdemes kilőni mindent az előzmények listájából, és újraindítani a készüléket (kikapcsolni, majd vissza).

Ha a készülék továbbra sem úgy viselkedik, ahogyan azt elvárnánk, és ahogyan azt korábban tette, akkor érdemes lehet egy restore az iTunes-ban, majd a folyamat végén “set up as new”-ként állítsuk be, hogy ne tegyen vissza semmit a korábbi mentésből, így az esetleges hibát sem.

(Ennél a cikknél minden más, OFF-topic hozzászólást törölni fogunk.)

Kapcsolódó cikkek:

Címkék:

  1. Jó cikk. Én még mindig 3GS -t használok, és ezért egy speciális multitask tweakkel dolgozom, amivel egyszerűen végleg be lehet zárni alkalmazásokat. Én is csak azokat zárom be amikről tudom hogy egyhamar nem lesz szükségem, így mindig jobban kordában tudom tartani a rendelkezésre álló memóriát, de még így is 3-4 naponta pattan egy respring.

  2. Naponta egyszer, általában este bezárok minden appot. i4-em van, eddig 7-10 naponta restartolni kellett, mert kezdett hülyülni. iOS5-tel még nem volt restart, de még csak 6 nap telt el.:)

  3. A háttérben futó appok gyors bezárásához ajánlom figyelmetekbe a removebackground nevü tweaket! Csak megrázod a telefont és minden alakalmazást azonnal bezár:D szerintem nagyon frappáns megoldás!

  4. Akinek be van állítva status bar memory az sbsettingsbe az láthatja hogy a szabad memória rohamosan csökken ha nyitogatjuk meg az alkalmazásokat. én lecsekkoltam megnyitottam minden lehetséges dolgot és kb olyan 16 mb ig lement és olyan lassu lett a 4 hogy csak na. ahogy kilőttem őket egyből 300 köré ugrott. ha még mindig nem ment 300 felé akkor nyomtam egy free up memory és máris minden jó lett.

  5. Akkor ha a facebook üzeneteim és egyéb értesítéseim nem jönnek le soksor, az azért van, mert a facebook app nem tökéletesen működik a push API-vel? Vagy lehet, hogy a facebook és az Apple push szervere közt veszik el valahol a push értesítésem?

  6. @hepike: Szerintem sem az volt a hiba oka, de ezt nem mondanám hibának. Ahogy nekünk is kell naponta restart, úgy bizony az oprendszernek is kell. Nem naponta, de hetente-kéthete egy restart jót tesz, és nem hoszem, hogy földhöz ver 30 sec offline mód. 🙂

  7. És akkor az milyen elv szerint működik, amit szinte bármelyik appal meg lehet csinálni amelyik nem képes a multitaskingra, hogy az app info.plist-jében az ‘UIApplicationExitsOnSuspend’ kulcsot csak kikapcsiljuk és már is fut a háttérben?

  8. Régen mindig mindent kilőttem multitasking listából valamelyik Cydia-s programmal, de miután búcsút intettem JB-nek lusta voltam egyesével. Ez esetben hasznos volt a lustaságom 😀 Gyorsabb lett a telefon működése és ugyan addig bírta az akksi mint előtte (sőt), ráadásul egy gonddal kevesebb.

  9. Ha már szóba jött a helymeghatározás:
    belépve az emlékeztetőkbe tegyük fel, írok egy bevásárlólistát a szombathelyi metróba odaérkezéskor riasztással. de hogy a pokolba adom meg a helyszínt (szombathelyi metro címe), ha nincs a kontaktjaim között és nem az a jelenlegi helyzetem?

  10. Na ezért lett volna jó, ha beleteszik a Beállítások menübe egy Multitasking almenüt, ahol ott figyelne az összes app, majd én beállíthanám, melyik futhat a háttérben.
    Szintén nem értem, miért nem integrálták bele az SBSettings-et. Hiszen a BETA már kint van belőle, remekül működik a “roló”-n.
    Ez a kettő önmagában többet ért volna nekem az iOS5-ben, mint a Siri.

  11. @crayo: ez csak jailbreakes elv szerint megy. 🙂 de azokat is bezárja, ha kell a memória. és attól, hogy ezt a kulcsot módosítod, még nem fognak feltétlenül multitaskingolni, ha a 7 API egyikét sem tette bele a fejlesztő az appba.

    @taky1974: azokat az appokat felesleges háttérbe tenni, amik nem használják egyik API-t sem, mert csak az erőforrásokat zabálnák fel.

    az Apple meg szereti ezt megoldani a háttérben úgy, hogy a usernek ne kelljen ilyesmikkel vacakolnia. sajnos viszont sok múlik a fejlesztőkön is, szóval ez most ilyen fele-fele játszma kb.

    persze egy sbsettings-implementáció Apple módra nem lenne rossz. én attól megyek kissé falnak, hogy a Weather, a Stocks, vagy a Calculator app miért nincs iPad-re. 😉

  12. Valaki tudna nekem segiteni abban, hogy miert crashel be a springboard, ha megnyomom ketszer a home gombot? ( i4,ios5,jb) nezegettem forumokat, kiegeszitettem az settings plistet is, de ugyanugy megmaradt a problema.

  13. @crayo: a cydia enélkül sem nulláról frissít, mert azt saurik frissítette valamikor a 4.0 magasságában, hogy ezt támogassa, ráadásul az ő megoldása működik 3.x esetén is. 😉

  14. @Jadeye: Hát ok.

    Egy kis offban tudna segíteni valaki?
    Adott egy vadi új gép vadi új win7-tel. Gondoltam felrakom az iOS 5-öt az i4-emre. Ígyhát leszedtem Apple bácsitól a legújabb iTunes-t, hozzádugom a géphez a szifonomat, erre semmi. Kiírta, hogy nem sikerült feltelepíteni a drivert. Kérdés: mi a teendő ilyenkor?

  15. Ha a dupla home gomb megnyomása után “kilövök” minden appot, akkor hogy maradhat a GPS működést jelző lila nyíl az aku% jelzés mellett? Ez már kétszer előfordult (csak úgy szűnt meg a hiba, ha a general settingsben ki-, majd visszakapcsoltam a location servicest)
    Ez iOS 5 bug?

Írd le a véleményedet! Moderációs elveinket ide kattintva olvashatod.

Hozzászólás írásához be kell jelentkezned!