Зачыніць аб'яву

Ёсць яшчэ шмат людзей, якія не ведаюць, як працуе шматзадачнасць у iOS. Для пачатку, аднак, неабходна адзначыць, што гэта не сапраўдная шматзадачнасць, а вельмі разумнае рашэнне, якое не абцяжарвае ні сістэму, ні карыстальніка.

Часта можна пачуць забабоны, што прыкладанні, якія працуюць у фонавым рэжыме ў iOS, запаўняюць аператыўную памяць, што прыводзіць да запаволення працы сістэмы і разраду батарэі, таму карыстальнік павінен адключаць іх уручную. Панэль шматзадачнасці фактычна не змяшчае спіс усіх запушчаных фонавых працэсаў, а толькі апошнія запушчаныя праграмы. Такім чынам, карыстальніку не трэба турбавацца аб працэсах, якія працуюць у фонавым рэжыме, за выключэннем некалькіх выпадкаў. Калі вы націскаеце кнопку «Дадому», праграма звычайна пераходзіць у рэжым сну або зачыняецца, так што яна больш не загружае працэсар або акумулятар і, пры неабходнасці, вызваляе неабходную памяць.

Такім чынам, гэта не паўнавартасная шматзадачнасць, калі ў вас запушчаныя дзясяткі працэсаў.На пярэднім плане заўсёды працуе толькі адно прыкладанне, якое пры неабходнасці прыпыняецца або цалкам адключаецца. Толькі некалькі другасных працэсаў працуюць у фонавым рэжыме. Вось чаму вы рэдка сутыкнецеся са збоем прыкладанняў на iOS, напрыклад, Android перапоўнены запушчанымі праграмамі, пра якія карыстальнік павінен клапаціцца. З аднаго боку, гэта робіць працу з прыладай непрыемнай, а з другога - выклікае, напрыклад, павольны запуск і пераходы паміж прыкладаннямі.

Тып выканання прыкладання

Праграма на вашай прыладзе iOS знаходзіцца ў адным з наступных 5 станаў:

  • Запуск: прыкладанне запускаецца і працуе на пярэднім плане
  • фон: ён усё яшчэ працуе, але працуе ў фонавым рэжыме (мы можам выкарыстоўваць іншыя прыкладанні)
  • Прыпынена: Усё яшчэ выкарыстоўвае аператыўную памяць, але не працуе
  • Неактыўны: прыкладанне працуе, але ўскосныя каманды (напрыклад, калі вы блакіруеце прыладу з запушчаным дадаткам)
  • Не працуе: Прыкладанне спынена або не запускаецца

Блытаніна ўзнікае, калі праграма пераходзіць у фонавы рэжым, каб не турбаваць. Калі вы націскаеце кнопку «Дадому» або выкарыстоўваеце жэст для закрыцця праграмы (iPad), праграма пераходзіць у фонавы рэжым. Большасць праграм прыпыняецца на працягу некалькіх секунд (Яны захоўваюцца ў аператыўнай памяці iDevice, каб іх можна было хутка запусціць, яны не так моцна нагружаюць працэсар і, такім чынам, эканомяць час аўтаномнай працы) Вы можаце падумаць, што калі праграма працягвае выкарыстоўваць памяць, у вас ёсць выдаліць яго ўручную, каб вызваліць. Але вы не павінны гэтага рабіць, бо iOS зробіць гэта за вас. Калі ў вас у фонавым рэжыме прыпынена працаёмкае прыкладанне, напрыклад гульня, якая выкарыстоўвае вялікі аб'ём аператыўнай памяці, iOS пры неабходнасці аўтаматычна выдаліць яго з памяці, і вы можаце перазапусціць яго, націснуўшы на значок прыкладання.

Ні адно з гэтых станаў не адлюстроўваецца на панэлі шматзадачнасці, панэль паказвае толькі спіс нядаўна запушчаных праграм, незалежна ад таго, спынена праграма, прыпынена або працуе ў фонавым рэжыме. Вы таксама можаце заўважыць, што праграма, якая зараз працуе, не адлюстроўваецца на панэлі шматзадачнасці

Фонавыя задачы

Звычайна, калі вы націскаеце кнопку «Дадому», праграма будзе працаваць у фонавым рэжыме, а калі вы ёй не карыстаецеся, яна аўтаматычна прыпыняецца на працягу пяці секунд. Такім чынам, калі вы, напрыклад, спампоўваеце падкаст, сістэма ацэньвае яго як запушчанае прыкладанне і адкладае спыненне на дзесяць хвілін. Не пазней за дзесяць хвілін працэс вызваляецца з памяці. Карацей кажучы, вам не трэба турбавацца аб перапыненні загрузкі націскам кнопкі "Дадому", калі на яе завяршэнне не спатрэбіцца больш за 10 хвілін.

Бестэрміновая праца ў фонавым рэжыме

У выпадку бяздзейнасці сістэма завяршае працу праграмы на працягу пяці секунд, а ў выпадку спампоўкі - затрымка на дзесяць хвілін. Аднак ёсць невялікая колькасць прыкладанняў, якія патрабуюць працы ў фонавым рэжыме. Вось некалькі прыкладаў праграм, якія могуць працаваць у фонавым рэжыме бясконца ў iOS 5:

  • Праграмы, якія прайграваюць гук і павінны быць перапынены на некаторы час (прыпыненне музыкі падчас тэлефоннага званка і г.д.),
  • Праграмы, якія адсочваюць ваша месцазнаходжанне (навігацыйнае праграмнае забеспячэнне),
  • Праграмы, якія прымаюць званкі праз VoIP, напрыклад, калі вы карыстаецеся Skype, вы можаце прымаць званкі, нават калі праграма працуе ў фонавым рэжыме,
  • Аўтаматычныя загрузкі (напрыклад, Newsstand).

Усе прыкладанні павінны быць зачыненыя, калі яны больш не выконваюць задачы (напрыклад, фонавая загрузка). Аднак ёсць выключэнні, якія бесперапынна працуюць у фонавым рэжыме, напрыклад родная праграма Mail. Калі яны працуюць у фонавым рэжыме, яны займаюць памяць, выкарыстанне працэсара або памяншаюць тэрмін службы батарэі

Праграмы, якім дазволена працаваць у фонавым рэжыме неабмежаваны час, могуць рабіць усё, што яны робяць падчас працы, ад прайгравання музыкі да спампоўкі новых серый Podcast.

Як я ўжо згадваў раней, карыстальніку ніколі не трэба закрываць праграмы, якія працуюць у фонавым рэжыме. Адзінае выключэнне з гэтага - калі праграма, якая працуе ў фонавым рэжыме, выходзіць з ладу або не выходзіць са сну належным чынам. Затым карыстальнік можа закрыць прыкладанні ўручную на панэлі шматзадачнасці, але гэта здараецца рэдка.

Такім чынам, у цэлым вам не трэба кіраваць фонавымі працэсамі, таму што сістэма паклапоціцца пра іх сама. Вось чаму iOS такая свежая і хуткая сістэма.

З пункту гледжання распрацоўшчыка

Прыкладанне можа рэагаваць на шэсць розных станаў у рамках шматзадачнасці:

1. applicationWillResignActive

У перакладзе гэты стан азначае, што праграма ў будучыні адмовіцца ад актыўнасці (гэта значыць праграмы на пярэднім плане) (гэта пытанне некалькіх мілісекунд). Гэта адбываецца, напрыклад, пры атрыманні званка падчас выкарыстання прыкладання, але ў той жа час гэты метад таксама выклікае гэты стан перад тым, як прыкладанне пераходзіць у фонавы рэжым, таму вам трэба прыняць да ўвагі гэтыя змены. Гэты метад таксама падыходзіць для таго, каб, напрыклад, ён прыпыняў усе дзеянні, якія ён выконвае, калі ёсць уваходны выклік, і чакаў да канца выкліку.

2. ApplicationDidEnterBackground

Статус паказвае, што праграма перайшла ў фонавы рэжым. Распрацоўшчыкі павінны выкарыстоўваць гэты метад для прыпынення ўсіх працэсаў, якія неабавязкова павінны працаваць у фонавым рэжыме, і ачысткі памяці ад нявыкарыстаных даных і іншых працэсаў, такіх як заканчэнне таймераў, ачыстка загружаных малюнкаў з памяці, якія неабавязкова будуць патрэбныя, або закрыццё злучэнні з серверамі, за выключэннем выпадкаў, калі для прыкладання крытычна важна выконваць злучэнні ў фонавым рэжыме. Калі гэты метад выклікаецца ў дадатку, ён, па сутнасці, павінен выкарыстоўвацца для поўнага прыпынення прыкладання, калі некаторая яго частка не павінна працаваць у фонавым рэжыме.

3. applicationWillEnterForeground

Гэты стан супрацьлеглы першаму стану, калі праграма пяройдзе ў актыўны стан. Стан проста азначае, што спячая праграма адновіцца з фону і з'явіцца на пярэднім плане на працягу наступных некалькіх мілісекунд. распрацоўшчыкі павінны выкарыстоўваць гэты метад, каб аднавіць любыя працэсы, якія былі неактыўнымі, калі праграма працавала ў фонавым рэжыме. Падключэнне да сервераў павінна быць адноўлена, таймеры скінуты, выявы і даныя загружаны ў памяць, і іншыя неабходныя працэсы могуць аднавіцца перад тым, як карыстальнік зноў убачыць загружанае прыкладанне.

4. дадатак DidBecomeActive

Стан паказвае, што прыкладанне толькі што стала актыўным пасля аднаўлення на пярэдні план. Гэта метад, які можа быць выкарыстаны для дадатковых карэкціровак карыстальніцкага інтэрфейсу або для аднаўлення карыстальніцкага інтэрфейсу ў зыходны стан і г.д. Фактычна гэта адбываецца ў той момант, калі карыстальнік ужо бачыць прыкладанне на дысплеі, таму неабходна з асцярожнасцю вызначайце, што адбываецца ў метадзе гэтага і ў папярэднім метадзе. Яны выклікаюцца адзін за адным з розніцай у некалькі мілісекунд.

5. applicationWillTerminate

Гэты стан адбываецца за некалькі мілісекунд да выхаду з праграмы, гэта значыць да фактычнага завяршэння працы праграмы. Альбо ўручную з шматзадачнасці, альбо пры выключэнні прылады. Метад варта выкарыстоўваць для захавання апрацаваных даных, для завяршэння ўсіх дзеянняў і выдалення даных, якія больш не спатрэбяцца.

6. ApplicationDidReceiveMemoryWarning

Апошняя дзяржава найбольш абмяркоўваецца. Ён адказвае за, пры неабходнасці, выдаленне прыкладання з памяці iOS, калі яно выкарыстоўвае сістэмныя рэсурсы без неабходнасці. Я не ведаю канкрэтна, што iOS робіць з фонавымі праграмамі, але калі ёй патрэбна праграма, каб вызваліць рэсурсы для іншых працэсаў, яна прапануе ёй з папярэджаннем памяці вызваліць любыя рэсурсы, якія ў яе ёсць. Так гэты метад называецца ў дадатку. Распрацоўшчыкі павінны рэалізаваць гэта так, каб праграма адмовілася ад выдзеленай ім памяці, захавала ўсё, што адбываецца, ачысціла з памяці непатрэбныя даныя і ў іншым выпадку належным чынам вызваліла памяць. Гэта праўда, што многія распрацоўшчыкі, нават пачаткоўцы, не задумваюцца аб такіх рэчах і не разумеюць іх, і тады можа здарыцца так, што іх прыкладанні пагражаюць разраду батарэі і/або неапраўдана спажываюць сістэмныя рэсурсы, нават у фонавым рэжыме.

Прысуд

Гэтыя шэсць станаў і звязаныя з імі метады з'яўляюцца фонам усёй "шматзадачнасці" ў iOS. гэта выдатная сістэма, пакуль распрацоўшчыкі не ігнаруюць той факт, што неабходна несці адказнасць за тое, што прыкладанне выдае на прылады іх карыстальнікаў, калі яны згорнутыя або атрымліваюць папярэджанні ад сістэмы і гэтак далей.

крыніца: Macworld.com

Аўтары: Якуб Пажарэк, Марцін Доўбек (ArnieX)

 
У вас таксама ёсць праблема, якую трэба вырашыць? Вам патрэбна парада ці, магчыма, знайсці правільнае прымяненне? Не саромейцеся звязацца з намі праз форму ў раздзеле Кансультаванне, у наступны раз мы адкажам на ваша пытанне.

.