Na Apple Insider se to poslední dobou zajímavými analýzami jen hemží, proto jsem se rozhodl i tento článek přeložit kompletně: S chytrým telefonem pracujete zcela jinak než se stolním počítačem. Tato skutečnost je pravdivá zejména tehdy, pokud se začneme bavit o multitaskingu. Přístup k multitaskingu je rozdílný u Google Androidu i iPhone OS 4.0. Podívejme se tedy, jak se liší.
Obsah článku
- Multitasking stolních počítačů
- Mobilní multitasking
- Úmyslně bez multitaskingu
- Pseudo multitasking
- Drahý multitasking se Services
- Multitasking u iPhone OS 4.0 vs. Android
- Efektivnější multitasking v iPhone OS 4.0
- Celosystémová upozornění jako nutná podmínka pro efektivní multitasking
- Provádění úloh na pozadí
- Tři speciální úlohy na pozadí: VoIP, Audio a Location
- Důvody pro jiný přístup k multitaskingu
- Unifikované vývojářské nástroje: Clang, LLVM a Xcode
Multitasking stolních počítačů
Na stolních počítačích s Mac OS X, nechcete mít otevřeno jen více aplikací, každou s vlastní sadou oken. Potřebujete, aby se na pozadí dělo mnoho věcí, protože jinak by vaše drahé CPU a GPU zahálelo, zatímco by mohlo dělat jiné užitečné úlohy.
Během posledního desetiletí vývoje Mac OS X, Apple přidal hromadu nových technologií, aby využil procesory. Operační systém přišel v roce 2001 s novou koncepcí grafického jádra, který udržuje CPU (a později GPU) zaměstnané na pozadí, od stínů přes průsvitnost až po odrazy.
Mac OS X má také nastaveno Spotlight indexování v pravidelných intervalech, spouští automatickou defragmentaci souborů, Time Machine zálohuje změněné soubory, abychom zmínili jen pár funkcí procesů na pozadí. Rychlejší Macy mají možnost většího rozsahu práce na pozadí díky různým jádrům procesoru, bez způsobování (alespoň doufejme) viditelného zpomalení aplikace na popředí.
Mnoho nových vylepšení ve Snow Leopardovi (Mac OS X 10.6) bylo okolo správy jak se jednotlivé úlohy předávají jednotlivým jádrům procesoru v systému (Grand Central Dispatch) a přebírá novátorský přístup k využití GPU (OpenCL). Čím více věcí operační systém dělá na pozadí, tím bohatší možnosti nabízí.
Mobilní multitasking
Když se objevil iPhone a přišla první mobilní variant Mac OS X, návrh nového operačního systému byl zcela obrácen naruby. Zatímco systém běží ze své vlastní omezené baterie, doopravdy nechcete, aby na pozadí běhaly hromady jiných věcí. Potřebujete aby nic nepracovalo tak dlouho, jak je to jen možné.
Samozřejmě, je zde hodně věcí, které je třeba provádět, dokonce více než na typickém stolním počítači. Například neustále potřebujete sledovat příchozí hovory nebo SMS zprávy. To znamená, že základní jednotka musí neustále sledovat nejbližší vysílač GSM s akceptovatelným signálem, aby byl telefon schopen přijmout příchozí hovor nebo zprávu.
Správa energie rozhodně není nová myšlenka, Apple prodává přenosné počítače více než 20 let a vytvořil velmi sofistikované způsoby, jak vypnout nepoužívaný hardware kvůli úspoře energie.
Ale na přenosném mobilním zařízení jako je iPhone to není jen o hardware. Je zde také radikálně nové uživatelské rozhraní pro práci s aplikací. Apple investoval hodně inženýrské práce na to, aby navrhl mobilní zařízení s vyváženými funkcemi a použitelnou životností baterie.
Úmyslně bez multitaskingu
Velkým rozhodnutím u iPhone bylo omezit efektivní multitasking na systémové aplikace, včetně Phone, SMS, iPod, Clock a procesy, které podporuje tyto a podobné funkce. Když se objevily aplikace třetích stran u iPhone OS 2.0, nebyl způsob jak je spouštět na pozadí.
Apple to vysvětlil tím, že povolení aplikací třetích stran na pozadí by jednoduše vyčerpalo příliš rychle baterii, prezentovalo potencionální bezpečnostní problém a vyžadovalo by nástroje pro správu procesů na pozadí aby nepoužívaly všechny volné systémové prostředky.
Místo toho Apple oznámil, že pracuje na řešení problému, kvůli kterému aplikace potřebují běžet na pozadí: sledovat externí aktualizace. Strategie Apple přišla později, než se očekávalo, ale výsledná Push Notifikace dovolila iPhone aplikacím vypadat, že odpovídají na externí aktualizace bez nutnosti je mít spuštěné na pozadí a neustále se dotazovat serveru na aktualizace.
Nebylo zde žádné technické omezení, které by udržovalo aplikace bez multitaskingu. Omezení bylo uměle vnuceno Applem, aby zjednodušil a optimalizoval výkon svého mobilního zařízení. Tím že uživatelé hacknuli iPhone, mohli získat multitasking pro jakoukoliv aplikaci třetí strany. Nicméně výsledkem bylo snížení výkonu baterie, její vydrže a uživatelé sami si museli hlídat výkon telefonu.
Pseudo multitasking
Google vytvořil mutlitasking pro Anroid, který pracuje velmi odlišně od multitaskingu stolního operačního systému. Ve skutečnosti je tak odlišný, že lze jen těžko uvěřit tomu, že by tuto technologii popisovalo stejné slovo.
Na stolním operačním systému, více aplikací se otevírá najednou (navíc k aplikacím na pozadí) a tyto aplikace jsou schopné mezi sebou spolupracovat. Tak jak se myš pohybuje mezi okny různých aplikací a klepe na různé věci, události jsou odesílané každé aplikaci. Všechny jsou zapnuté a aktivní, i když úlohy mohou být na pozadí a nic nedělat. To nezabírá žádný procesorový čas a nespotřebovává žádnou reálnou paměť (díky mechanismu virtuální paměti), dokud je uživatel neaktivuje.
Na Androidu, když se uživatel přepíná z jedné aplikace do druhé, aplikace na pozadí je potlačena. To je jako by přišla do kómatu. Zabírá paměť (což je nepříjemné) ale nemůže na nic odpovídat nebo pokračovat v práci či začít nové úlohy. Pokud systém začne mít málo paměti, začne ukládat stav takto potlačené paměti a ukončí ji.
Ukončené aplikace však stále vypadají jako by pracovaly. Když se na ně uživatel přepne, jsou znovu spuštěny a je obnoven jejich stav systémem, takže aplikace vypadají, jako by se nic nestalo a pracovaly na pozadí. To však vůbec není multitasking, spíše jen rychlejší cesta k přepínání mezi aplikacemi, které běhají samostatně. Stejně jako na iPhone.
Drahý multitasking se Services
Aby systém Android mohl vůbec něco provádět na pozadí, aplikace Androidu musí dodat komponentu "service" (služby), která spouští úlohy, které pokračují i po té, co je příslušná aplikace potlačena. U Androidu service využívá model "klient/server" pro provedení úloh na pozadí jako je přehrávání hudby či stahování nových zpráv ze serveru.
Jsou to převážně tyto služby na pozadí, které spotřebovávají největší část baterie na telefonech Android, protože otevírají síťové spojení se vzdáleným serverem a udržují toto spojení otevřené. To nutí 3G nebo WiFi, aby byly neustále aktivní, což je nejrychlejší cestou pro vyčerpání baterie u mobilního zařízení.
Služba Androidu umožňuje také aktivovat GPS aby získala informace o aktuální pozici. To může být ještě dražší, pokud mluvíme o využití baterie. Když je zapnuto GPS, jak mobilní síť, tak GPS anténa (mobilní signál je používán pro asistenci GSP sledování). Services tak opět spotřebují dostupnou RAM a CPU, ale problémem je zde primárně baterie.
Multitasking u iPhone OS 4.0 vs. Android
Apple si byl zcela jistě vědom přístupu, který použil Google u Androidu a není žádný důkaz toho, že by si Google patentoval koncept služeb ve veřejně publikovaném, open source operačním systému. Fakt, že Apple prostě neokopíroval celý model mulittaskingu z Googlu indikuje, že Steve Jobs nemluvil do větru, když říkal že Apple studoval problém a vymyslel vlastní přístup k multitaskingu o kterém věří, že je lepší.
Ačkoliv některé prvky multitasking API od Apple mají podobný přístup jako Android. Podle Davida Quintany je "zřejmý multitasking" iPhone OS 4.0, který Apple nazývá "Fast App Switching" (Rychlé přepínání aplikací), téměř identický s potlačením aplikace u Androidu, jak je to popsáno výše.
Když se přepínáte z jedné aplikace do druhé u iPhone OS 4.0, předchozí aplikace je držená v paměti, ale její aktivita je zmražena. Jak již bylo předestřeno výše, nejedná se o multitasking jak jej známe ze stolních operačních systémů, ale spíše jen o iluzi toho, že máte spuštěno více aplikací. Jsou jen připraven běžet znovu, pokud se na ně přepnete, proto také jméno Fast App Switching.
Před tím, než Apple oznámil tento mechanismus, mnoho iPhone programátoru vyjádřilo myšlenku, že systém nepotřebuje skutečný multitasking, jako spíše koncept "uložení stavu", který by dovolil uživatelům rychle přepínat mezi aplikacemi. A to je přesně to, co Fast App Switching dělá.
Stejně jako u Androidu, iPhone OS 4.0 získává paměť zpět tím, že ukončí aplikaci, která je zastavena na pozadí, takže po návratu uživatele je aplikace znovu otevřena na stejném místě, kde ji uživatel opustil. Nicméně na rozdíl od Androidu, iPhone OS 4.0 nabídl jednodušší cestu jak ukončit běžící aplikaci, bez nutnosti nástroje pro správu procesu jako je TasKiller.
Protože zmáčknutí tlačítka Home již neukončí aplikaci. Apple přišel s klepnutím a podržením tohoto tlačítka, jako zkratky která zobrazí červené mínus u běžící aplikace která bude ukončena a odstraněna z běžících aplikací tak jak jsme na to byli zvyklí s jednoduchým stisknutím tlačítka Home u předchozích verzí iPhone OS. Není třeba žádná manuální správa aplikací a systémových procesů, které mohou vyústit v nepředvídaný problém pro uživatele.
Náhodou je tento způsob "pseudo multitaskingu" plánovaný také u Windows Phone 7 Microsoftem na konci tohoto roku. Zdůrazněme to však ještě jednou: tento způsob multitaskingu neřeší běh více aplikací najednou, tak jak je tomu u stolních operačních systémů. Je to o ponechání aplikací v paměti, aby jste mezi nimi mohli rychle přepínat.
Efektivnější multitasking v iPhone OS 4.0
iPhone OS 4.0 jde však dále za pseudo multitasking Windows Phone 7. Nový iPhone OS 4.0 také podporuje specifickou sadu úloh u aplikací třetích stran, které by uživatelé chtěli nechat běhat na pozadí po té, co opustí aplikaci. To je koncepčně podobné s Androidovými Services, ale implementováno zcela novou cestou. Quintana o tom píše: "úlohy na pozadí jsou zcela odlišné od Androidu".
Primárním rozdílem podle Quintany je, že zde neexistuje koncem Services v iPhone OS 4.0. Aplikace neposkytují komponentu klient/server. Místo toho, Apple vytvořil sadu pravidel, které aplikace musí dodržet, aby jí bylo dovoleno provádět úlohu po té, co uživatel aplikaci přepne.
Myšlenka aplikace, která pracuje po té co se uživatel přepne do jiné, není u iPhone OS nová. Je nová pouze u aplikací třetích stran. Aplikace Phone to již dělá, tak jak to je zmiňováno v reklamě na iPhone. Zatímco uživatel hovoří, může stisknout tlačítko Home a prohlížet www stránky, hledat kontakt nebo zkontrolovat email, zatímco Phone applikace stále udržuje hovor.
Totéž se stává u iPod aplikace, která stále přehrává hudbu. SMS a Mail stále získávají nové zprávy na pozadí a tak dále. Nicméně to bude zakrátko problém pro uživatele, kteří budou chtít mít hromadu aplikací, které spotřebovávají tolik ceněné hardwarové zdroje a baterii zcela bez omezení.
Aby se vyvážila potřeba uživatele dělat najednou více úloh a očekávání, že jejich telefon bude fungovat rozumně po velmi dlouho dobu, Apple definoval řadu úloh na pozadí, které aplikace třetích stran mohou implementovat a nastavit pravidla, která zajistí že tyto úlohy budou prováděny tak efektivně jak je to jen možné.
Celosystémová upozornění jako nutná podmínka pro efektivní multitasking
První krok na této cestě přišel minulý rok: Push Notification. Místo aby aplikace byla na pozadí a zaplavovala služby dotazy na aktualizace serveru, Apple vytvořil systémovou službu, která efektivně poslouchá aktualizace za aplikaci a pak prezentuje uživateli upozornění na základě kterého může uživatel jednat (pokud je to vhodné) spuštěním nebo přepnutím aplikace, která získala toto upozornění.
To je něco, co jiné platformy nemají. Dokonce i Blackberry přišlo s push messagingem teprve nedávno pro aplikace třetích stran. Výsledkem je, že většina aplikací pro Blackberry je navrženo neefektivně bez push messaginu, a používají neregulovaný multitasking, který jim stejnou úlohu dovolí provádět neefektivně. Uživatelé za to platí kratší výdrží baterie.
Stejným způsobem spotřebovávají energii baterii i aplikace Androidu, protože každá si definuje vlastní proces na pozadí, místo jednotného a unifikovaného systému vláken, které sledují aktualizace, zatímco aplikace spí. Push Notifikace u Apple vyřešila komplexní problém pro aplikace třetích stran před multitaskingem.
U iPhone OS 4.0 přišla druhá úroveň systémových notifikačních služeb: Local Notifications. Tento mechanismus dovolí aplikaci naplánovat upozornění a systém se o její provedení postará sám. Místo toho aby byla akce vynucena externím zdrojem, je nastavena aplikací, když je aktivní a pozdržena a provedena včas systémem, zatímco aplikace spí.
Příkladem může být aplikace, která nastavuje upozornění na webcast. Aplikace nepotřebuje zůstávat na pozadí a odpočítávat čas do spuštění. Systém může přijmout upozornění a spustit aplikaci nebo uložení webcastu pro uživatele za aplikaci, zatímco aplikace samotná spí.
Provádění úloh na pozadí
Ačkoliv je nejefektivnější mít aplikace spící, existuje pár případů, kdy aplikace opravdu něco potřebuje provést na pozadí. Nejtypičtějšími příklady jsou dokončení časově náročných úloh, jako je například upload souboru. Uživatelé nechtějí sledovat teploměr, což je dnes právě to, co v současnosti dělají.
Právě nyní, když uživatelé ukončují aplikace třetích stran zatímco aplikace dokončuje práci, operace selže, protože aplikace byla násilně ukončena systémem. Vlastní aplikace Apple, včetně Mailu a SMS pokračují v odesílání zprávy i po té, co to z hlediska uživatele vypadá, že ukončil aplikaci. Ale to je proto, že aplikace Apple nejsou přinuceny se ukončit. Jiné aplikace jsou.
Aby umožnil tento druh multitaskingu v iPhone OS 4.0, Apple přidal Task Completion API - funkce, která dovolí vývojářům navrhnout aplikaci tak, že může požádat o specifický čas k dokončení úlohy, úlohy kterou aplikace má dokončit před tím, než ji systém uspí. Když aplikace dokončí svou úlohu nebo požadovaný čas expiruje, systém aplikaci uspí jako obvykle.
Tři speciální úlohy na pozadí: VoIP, Audio a Location
Apple v iPhone OS 4.0 podporuje tři různé multitaskové scénáře v souvislosti s úlohami, které aplikace může potřebovat provádět. Tento mechanismus povoluje výjimku v modulu "pouze jedna aplikace".
První výjimkou je API, které dovoluje pracovat jako bundlovaná aplikace Phone: je schopná přijímat hovory a pokračovat zatímco jsou používané jiné aplikace. Pouze aplikace Phone může zpracovat mobilní volání, takže je tato funkce nazvána Voice over IP a je navržena pro podporu volání přes internetové spojení, pomocí aplikace jako Skype.
Aby aplikace mohla tohoto mechanismu využít musí se registrovat u systému a spát, zatímco systém udržuje síťové spojení pro přichozí VoiceIP hovor. Když přijde hovor, systém vzbudí VoIP aplikace a převede kontrolu síťového spojení na službu.
Druhý scénář je podobný vestavěné aplikaci iPod:Background Audio (Zvuk na pozadí). To dovoluje aplikacím jako Pandora spouštět a přehrávat hudbu dokonce i když není aplikace na popředí. Apple požaduje od každé aplikace, která chce přehrávat zvuk na pozadí, aby používala tuto službu, stejně jako ji používá iPod aplikace.
Třetí scénář zahrnuje aktualizaci polohy. Nové API sledování polohy nabízí aplikacím dvě možnosti jak používat data o poloze: GPS aplikacím, které potřebují data pro řízení a sociálním sítím, kterou používají polohu uživatele aby kontaktovali jejich přátel nebo navrhli zajímavé akce poblíž.
V prvním případě, Apple dovolují aplikacím určených pro řízení (jako TomTom) zůstat vzhůru a získávat GPS informace aby mohly poskytovat audio informace o směrech jízdy i když je aplikace na pozadí. To velmi rychle vyčerpává baterii, ale většina lidí kteří používají GPS to dělá v autě, se zařízením které dodává napájení.
Na druhou stranu, aplikace sociálních sítí jako Loopt potřebují informace o poloze uživatele, aby byly užitečné, ale nepoužívají napájení auta. Pokud používají GPS, baterie iPhone se vyčerpá velmi rychle a pouze s touto velmi jednoduchou službu s omezenou hodnotou. Aby se tyto služby používaly efektivně, Background Location dodává informace o poloze v okamžiku, kdy jej dostane telefon při pohybu uživatele mezi GSM vysílači.
Tato aktualizace nastává v okamžiku, kdy se uživatel přesune mezi 500 - 1000 m. Když je tato změna zaznamenána, systém probudí aplikaci, aktualizuje polohu, poskytne ji čas na zpracování změny a pak ji znovu uspí. To obejde drahý provoz GPS (myšlen v energii baterie), zatímco dovolí pracovat i těmto drobným aplikacím bez toho, aby byly neustále na popředí (jak je to v současnosti u iPhone).
Důvody pro jiný přístup k multitaskingu
Kromě zvýšené efektivity, přístup Apple zjednodušil kompatibilitu mezi zařízeními jako je iPhone 3G, které nebudou podporovat multitasking, zatímco jiné zařízení ano. Aplikace, která bude využívat výhod nového API, jednoduše požádá o provedení úloh na pozadí, takže pokud to hardware nepodporuje, požadavek je zamítnut operačním systémem.
Přístup Google se službami vyžaduje nový model komponent klient/server. Pokud by to Apple okopíroval, vývojáři by museli vytvářet nové sady aplikací pro starší zařízení a zcela nový kód pro aplikace nové. Což je velmi komplexní a problematický přechod, pokud vezmeme v úvahu, že Apple má již ohromnou knihovnu aplikací v App Store.
Dále, mnoho vývojářů, kteří pracují se services na Androidu již implementovalo své služby pomocí Push Notifikací u iPhone OS. Implementace služeb tak jak jsou k dispozici u Androidu by nutně vyústilo v přeportování Androidových Services, místo toho, aby se využil efektivnější Push Notification. Tím se vytvořil stejný problém jako u Blackberry, push funkce jsou převážně ingnorovány a nepoužívány.
Unifikované vývojářské nástroje: Clang, LLVM a Xcode
Pokud jste si přečetli předcházející řádky, musíte dojít k závěru, že Apple navrhuje multitaskové funkce pro iPhone OS 4.0 tak, aby nejlépe vyhovovaly iPhone OS platformě, místo aby se snažil o kompatibilitu a podobnost s dalšími platformami, které dělají tyto věci jinak.
Nemělo by být překvapením, že Apple nemá zájem v umožnění snadného přeportování aplikací mezi iPhone OS a dalšími platformami. Tím by jen zředit výhody iPhone OS a vyzval vývojáře ať se zaměří na nejmenší společný prvvek mezi platformam, místo toho aby aspirovali na plné výhody unikátních funkcí iPhone OS.
Toto je také důvod, proč Apple nemá zájem na podporu Flashe nebo Javy jako meta platformy pro iPhone a proč také nepodporuje žádné snahy třetích stran o vytvoření vývojářských nástrojů, které budou vytvářet iPhone aplikace. Flash Professional strategie ve kterou doufalo Adobe by neumožnilo využít multitaskingové služby iPhone OS 4.0, Adobe by nebylo schopné tyto funkce zapracovat tak rychle jak by si Apple přál, ani pokud by Adobe o ně mělo zájem.
Nový zákaz používat u iPhone OS 4.0 jiné jazyky než C, C++ a Objective-C byl vnímán jako útok na externí vývojářské nástroje jako Adobe Flash CS5. Nicméně pozorovatelé, včetně Rainera Brockerhoffa již dříve poznamenávali, že zaměření Apple na C jazyky má spíše hodně společného s optimalizací iPhone OS pomocí Clang.
Clang (zkratka pro "C Language" - Jazyk C) je open source projekt, který Apple založil jako nový kompilátor pro (nepřekvapivě) C, C++ a Objective-C, Clang se připojuje k LLVM, Low Level Virtual Machine, který slouží jako kompilátor pro Apple Xcode (na pozadí) pro Mac OS X a iPhone OS.
Kombinace Clang a LLVM efektivně nahrazuje GCC (GNU kompilátor s GPL licencí pro Unixové (unix-like, chcete-li být přesní) operační systémy). Protože náhrada tohoto nástroje používá méně tvrdou BSD licenci, Apple jej může více integrovat do svého prostředí Xcode.
Dále Clange a LLVM dovolí Apple lépe optimalizovat různé kroky při kompilaci kódu, čímž vytvoří efektivnější Mac a iPhone aplikace, rychlejší, kompaktnější, snadněji odladitelné díky optimalizacím a vylepšení které nabízí modulární kompilační nástroje oproti GCC.
Když Apple investoval tolik práce do Clang a LLVM, není žádný div, že Apple tlačí vývojáře, aby používali jeho vývojářské nástroje místo toho, aby se snažili hledat nejmenší společní činitel pro všechny platformy, který by umožnil vytvářet aplikace pro iPhone, které nejsou optimalizované pro iPhone nebo nejnovější funkce iPhone OS, včetně nové podpory multitaskingu.