Ёсць яшчэ шмат людзей, якія не ведаюць, як працуе шматзадачнасць у 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)
У вас таксама ёсць праблема, якую трэба вырашыць? Вам патрэбна парада ці, магчыма, знайсці правільнае прымяненне? Не саромейцеся звязацца з намі праз форму ў раздзеле Кансультаванне, у наступны раз мы адкажам на ваша пытанне.
Прывітанне, вельмі класны артыкул, але мне цікава, ці ёсць у вас тэхнічная падтрымка для яго. Таму што я некалькі разоў разраджаў батарэю ўвечары перад сном, і здаралася, што пры адключаным Wi-Fi і мабільнай перадачы дадзеных спатрэбілася больш, чым у іншым выпадку з адключаным Wi-Fi і толькі 3G.
На жаль, вопыт паказвае, што ў iOS прыкладанні трэба адключаць уручную, і сістэма больш не працуе так добра, як раней.
Я замяніў свой iPhone на Windows Phone (Samsung Omnia W за 6200,-), і хуткасць сістэмы на зусім іншым узроўні.
Баюся, калі выйдуць планшэты Windows 8 Metro, я таксама замяню iPad...
@007 – так, калі вы параўноўваеце старыя iPhone3G з новымі WP, то так (хто б мог гэтага чакаць?) WP будзе крыху хутчэйшым. У адваротным выпадку плёткі пра Карлюльку вам не падабаюцца і было дарэчы параўнаць цяперашняе ГВ. Я таксама купіў WP7 і, нарэшце, атрымаў 4s, які ўяўляе зусім іншы ўзровень зручнасці выкарыстання, чым WP7. Так што прыемна праходзьце і бясконца гартайце пліткі.
Я цалкам згодны з Паяй
Я б зноў унёс свой уклад з абломкаў іншай бочкі - Samsung Galaxy S і iPhone 4 - я б сказаў, што параўнальныя па ўзросце? Падчас iOS 4, і з пункту гледжання зручнасці выкарыстання і хуткасці дзесьці акрамя Android, Apple вельмі добра вырашыла канцэпцыю працы з праграмамі, але тое ж самае ўжо не так з Android. У рэшце рэшт, я ўсё роўна выбраў 4S, і ў мяне няма ніякіх прэтэнзій, таму што "ён проста працуе" .. і працуе вельмі хутка!
Тэорыя прыгожая... Але на практыцы я ўсё роўна закрываю заяўку ў бары ;)
Дзякуй, вельмі цікава, прагматычна, цікава, не бракуе размаху і глыбіні. Істотна падкрэсліваючы апантанасць сучаснай моладзі гэтым забароненым брэндам! Але дзякуй за яе, як і за гэты артыкул.
Артыкул зусім няправільны.
Праграма не закрываецца пры націску кнопкі «Дадому», як памылкова сказана, а прыпыняецца. г.зн. дакладна не выдаляйце з памяці і не кідайце. Проста прыпыніце запуск, iOS дасць гэтай праграме 0% працэсарнага часу. Ён дакладна не «падпампоўвае» нідзе ў памяці iDevice, як сказана ў артыкуле. Гэта сапраўды дзякуючы таму, што можна выкарыстоўваць пераключэнне прыкладанняў.
Праграма выдаляецца з памяці, калі ў тэлефоне мала памяці для запуску іншых праграм з больш высокім прыярытэтам (звычайна іншая праграма працуе на пярэднім плане).
У першым выпадку, вы маеце рацыю, гэта была памылка перакладу. Што тычыцца замены, то тут гаворка не ідзе пра гэта, мы гаворым пра аператыўную памяць, а не пра месца для захоўвання ў прыладзе iOS.
вобраз прыкладання захоўваецца ў памяці на працягу абмежаванага часу, пакуль ён не будзе зноў выкліканы камандай (гл. 13,7 ГБ з 16 ГБ: 2,3 ГБ зарэзервавана для сістэмы і прыпыненых прыкладанняў)
Такім чынам, неабходна адрозніваць такія праграмы, як навігацыя, Skype і падобныя, гэтыя праграмы застаюцца актыўнымі нават у фонавым рэжыме, або пэўная функцыя не заканчваецца і працягвае, напрыклад, адпраўляць дадзеныя аб сваім месцазнаходжанні або інфармацыю аб месцазнаходжанні. Або як Vokul у рэжыме Pord слухаць і шматзадачнасць па-ранейшаму слухае ў фонавым рэжыме.
Гэтыя прыкладанні разраджаюць акумулятар і іх трэба закрываць уручную, а не чакаць iOS. з іншымі не трэба, там толькі ў выпадку збою прыкладання.
Не магу пагадзіцца з артыкулам. Мін. на iPad 1-га пакалення (iOS 5.0.1) ясна відаць, шмат у мяне «адкрытых» праграм на панэлі шматзадачнасці ці толькі некалькі. iOS сапраўды спрабуе ачысціць памяць, але гэтага, відавочна, недастаткова - невялікі памер аператыўнай памяці, верагодна, з'яўляецца яе самым вялікім недахопам.
таму многае залежыць ад сістэмы і абсталявання, якое выкарыстоўваецца, цалкам лагічна, што на iPad 1 з iOS 5.0.1 будзе горш, чым на iPad 2-га пакалення
Прабач, таварыш, гэта апісанне ІДЕАЛЬНАГА спосабу, як гэта павінна працаваць. На жаль, рэальнасць зусім іншая, і вы б гэта ведалі, калі б карысталіся прадуктамі Apple, прынамсі столькі ж, колькі я (г.зн. часам).
«Часта можна пачуць забабоны, што праграмы, якія працуюць у фонавым рэжыме ў iOS, запаўняюць аператыўную памяць»,
Гэта не забабоны, гэта проста факт. Бо вы самі гэта сцвярджаеце ў артыкуле.
«Як я ўжо згадваў раней, карыстальніку ніколі не трэба закрываць прыкладанні, якія працуюць у фонавым рэжыме».
ГЛУЗДЗІЦА. Гэта проста фігня, яблычная прапаганда, не злуйцеся на мяне.
«Але вам не трэба гэтага рабіць, бо iOS зробіць гэта за вас. Калі ў вас у фонавым рэжыме прыпынена патрабавальнае прыкладанне, напрыклад, гульня, якая выкарыстоўвае вялікі аб'ём аператыўнай памяці, iOS аўтаматычна выдаліць яго з памяці, калі гэта неабходна, і вы можаце перазапусціць яго, націснуўшы на значок прыкладання».
Няпраўда. Сітуацыя крыху іншая. Тыповы прыклад - у мяне ў фонавым рэжыме працуюць патрабавальныя праграмы, мне патрэбныя гульні. Я запускаю браўзер, адкрываю пару ўкладак -> трэба больш памяці. Што будзе? Я трымаю патрабавальныя прыкладанні ў фонавым рэжыме, наадварот, САМ БРАЎЗЭР ПАДАЕ. Калі я закрываю патрабавальныя дадаткі ўручную, браўзер працуе доўга без праблем.
Гэта практыка, а не тэорыя. І я здзіўлены, што, як даўні карыстальнік прадукту Apple, вы ўсё яшчэ гэтага не ведаеце.
Дзякуй, гэта вельмі добра апісана і добра растлумачана. Вы мне вельмі дапамаглі ;-) ♥
Пачну з таго, што я ні за, ні супраць iOS, як і з Android, але тут ёсць некалькі дзіўных рэчаў, калі, як тут напісана: "вы рэдка сутыкаецеся са збоямі прыкладанняў на iOS", то на Android прыкладанні выходзяць з ладу прыблізна раз у год: -П
http://dotekomanie.blog.mobilmania.cz/2012/02/stabilita-ios-vs-android/
Так, але выпадкаў, калі вам трэба закрыць прыкладанне ўручную, сапраўды мінімальна, я выкарыстаў яго адзін раз? ;-) і даваць спасылку на параўнальны тэст ад Mobilemania зусім бессэнсоўна, калі я хачу прачытаць пра рэкламу, якую аплаціў Google, я зазірну туды ;-) кожны можа атрымаць у рукі любы тэлефон Android, і гэта не будзе працаваць чыста, гэта значыць, за выключэннем Galaxy Nexus, які з'яўляецца сістэма больш-менш індывідуальнай. Увогуле, Android - гэта катастрофа
@Mek – я выкарыстоўваю прадукты Apple штодня на працягу некалькіх гадоў, і са мной такога ніколі не здаралася, так што ваша тэорыя чамусьці не працуе.
OT:
@redakce – Вы бачыце, што над сайтам пастаянна працуюць ці нешта з ім адбываецца, але ў мяне такое адчуванне, што не праходзіць і тыдня, каб усё запрацавала як мае быць. І я ўжо сюды асабліва не хаджу, бо новае аблічча мяне не задавальняе. Прынамсі я карыстаўся мабільнай версіяй на айфоне, а цяпер яна зусім не працуе - як так? У цяперашні час яны не адказваюць на паведамленні ў каментарах.
@SteveJSF На жаль, усё не заўсёды атрымліваецца так, як мы хочам. Што тычыцца адказаў, новы плагін SEO парушыў іх, зараз гэта вырашаецца.
WP-Touch таксама спыніў нашу службу па нейкай прычыне, таму мы вырашылі прыдумаць лепшае рашэнне, чым гэты плагін. Такім чынам, вы можаце чакаць наступных навін у бліжэйшы час :-)
Добры артыкул. Што тычыцца практыкі, я хацеў бы сказаць, што я згодны з некаторымі рэчамі, і часцей за ўсё гэта працуе, як сказана, але, на жаль, усё яшчэ ёсць дрэнна напісаныя прыкладанні, якія паводзяць сябе некарэктна, а таксама бываюць такія выпадкі, як той адзначаюць некаторыя чытачы. Я думаю, што Skype з'яўляецца вельмі добрым прыкладам, я ведаю з практыкі, што ён усё яшчэ працуе ў фонавым рэжыме (і гэта нармальна, і так павінна быць), але праблема ў тым, што гэта дадатак моцна разраджае акумулятар прылады і Я больш не бачу яго належным чынам. І наадварот, такія праграмы, як Facebook, Badoo і г.д. яны таксама ўсё яшчэ працуюць у фонавым рэжыме, але іх спажыванне амаль незаўважна (прынамсі, я не заўважаю). Так што я думаю, што памылка ў асобных прыкладаннях. Калі б вы ведалі, якія, дастаткова было б адключыць уручную толькі іх!
Такім чынам, Facebook працуе па меры неабходнасці, а Skype - толькі пры неабходнасці.
Ну, з іншага боку, калі мне трэба эканоміць батарэю і я ведаю, што трэба трымаць iPhone «жывым» як мага даўжэй, я таксама адключаю ўсё непатрэбнае ў шматзадачнасці, але ў асноўным гэта не мае вялікага ўплыву, але пры неабходнасці я абмяжоўваю 3G, увесь мабільны Інтэрнэт, Wi-Fi, службы вызначэння месцазнаходжання, рэжым палёту, інтэнсіўнасць асвятлення і г.д. У рамках руціны я таксама адключаю вышэйзгаданыя праграмы ў шматзадачнасці.
Так што асабіста я лічу, што артыкул праўдзівы, на жаль, некаторыя праграмісты абвяргаюць гэтыя рэчы ў сваіх праграмах, таму што іх праграмы некарэктныя, і, на мой погляд, для гэтага ёсць толькі два рашэнні: 1. Калі можна не выкарыстоўваць праграму і знайсці альтэрнатыва, калі гэта магчыма, або 2. Калі гэта немагчыма, паглядзіце, напрыклад, Skype, напішыце гэта праграмісту ў справаздачы і спадзяйцеся, што яны з гэтым што-небудзь зробяць.
Магчыма, бессэнсоўна адключаць праграмы ўручную, але я ўсё роўна гэта раблю. Я таксама спрабаваў не адключаць сістэму прыкладанняў, дазваляў ім працаваць (ці пакідаў іх спячымі ў фонавым рэжыме), і час аўтаномнай працы быў значна меншым, таксама неабходна было перазагрузіць iPad 2 прыблізна праз тры тыдні, ён павольна рэагаваў. Таму я выключаю прыкладанні ўручную, акумулятар працуе даўжэй, я нядаўна перазагрузіў яго на Каляды, і ўсё працуе нармальна.
Дарэчы, я раблю тое ж самае ў Mac OS X, я проста зачыняю непатрэбную праграму (CMD+Q), гэта лепш, чым каб яна спяла ў фонавым рэжыме і непатрэбна спажывала аператыўную памяць (што OS X можа' т працаваць з вельмі добра). У мяне мала аператыўнай памяці, усяго 8 ГБ, але ў Windows 7 з 8 ГБ сістэма не адказвала павольна і не рабіла свапу, у OS X гэта даволі распаўсюджаная з'ява (я ніколі не выключаў кампутар, раблю гэта і з Mac, таму месяц і больш часу працы не з'яўляецца выключэннем, праблема ў тым, што мне часам даводзіцца перазагружаць Mac у якасці меры засцярогі, каб вызваліць аператыўную памяць і «паскорыць», Windows 7 гэта не патрэбна).
Мяне больш цікавіць, як падарваць прыкладанне. Са мной адбылося тое, што прыкладанне (у прыватнасці, на Geocaching) трапіла ў стан, калі яно загружала што-небудзь з бацькоўскага сервера, і затрымалася ў гэтым стане. Кнопка "Дадому" працавала, пасля перазагрузкі яна вярнулася ў замарожаны стан (там, дзе я спыніўся). Ручны выхад (у меню дэгустацыі, утрымлівайце значок і мінус, каб закрыць) = прыкладанне знікла, пасля перазапуску яно адкрылася ў зыходным стане, дзе завісла. Такім чынам, я зачыніў усё, выключыў тэлефон, уключыў яго, двойчы пстрыкнуў ГАЛОЎНАЯ і вось - усе прыкладанні былі там, як і былі да закрыцця, непасрэдна перад выключэннем. Перазагрузка таксама не дапамагла - трымайце дома і вышэй, пакуль не нагрэецца. Адзінае, што дапамагала - выдаленне прыкладання з тэлефона, перазапуск і пераўсталяванне на тэлефон. Неяк не ўзяў.
Гэта кіраванне шматзадачнасцю працуе, і распрацоўшчыкі павінны справіцца з такімі сітуацыямі. Для тых, хто зацікаўлены ў больш падрабязным і прафесійным апісанні ўсёй сітуацыі, я напішу тут, як гэта.
Дадатак можа рэагаваць на 6 станаў, і гэта:
applicationWillResignActive
applicationDidEnterBackground
applicationWillEnterForeground
applicationDidBecomeActive
applicationWillTerminate
applicationDidReceiveMemoryWarning
Зараз паспрабую падрабязней апісаць гэтыя станы.
applicationWillResignActive – гэты стан азначае, што ў будучыні (некалькі мілісекунд) праграма адмовіцца ад актыўнасці праграмы (г.зн. праграмы на першым плане). Гэта адбываецца, напрыклад, пры атрыманні выкліку падчас выкарыстання праграмы, але ў той жа час гэта таму гэты стан спрацуе яшчэ да таго, як праграма пяройдзе ў фонавы рэжым, таму вам трэба прыняць да ўвагі гэтыя змены. Гэты метад таксама падыходзіць для таго, каб, напрыклад, ён прыпыняў усе дзеянні, якія ён выконвае, калі ёсць уваходны выклік, і чакаў да канца выкліку.
applicationDidEnterBackground - гэты статус паказвае, што праграма перайшла ў фонавы рэжым, распрацоўшчыкі павінны выкарыстоўваць гэты метад, каб прыпыніць усе працэсы, якія неабавязкова павінны працаваць у фонавым рэжыме, і ачысціць памяць ад нявыкарыстаных дадзеных і іншых працэсаў, напрыклад, таймеры заканчэння тэрміну дзеяння, ачыстка з выявы, загружаныя ў памяць, якія неабавязкова спатрэбяцца, або спыняюць злучэнне з серверамі, калі для прыкладання не крытычна выконваць злучэнне ў фонавым рэжыме. У прынцыпе, гэты метад пры выкліку ў дадатку павінен выкарыстоўвацца для поўнага прыпынення прыкладання, калі нейкая яго частка не павінна працаваць у фонавым рэжыме.
applicationWillEnterForeground – гэты стан супрацьлеглы першаму стану, калі праграма пяройдзе ў актыўны стан. Гэты стан прыкладання проста азначае, што ў наступныя некалькі мілісекунд спячае прыкладанне адновіцца з фону і з'явіцца на пярэднім плане (прыкладанне пераходзіць на пярэдні план). Распрацоўшчыкі павінны выкарыстоўваць гэты метад для аднаўлення любых працэсаў, якія былі неактыўныя, пакуль прыкладанне было у фонавым рэжыме злучэнні з серверамі павінны быць адноўлены, таймеры скінуты, выявы і даныя загружаны ў памяць і іншыя неабходныя працэсы могуць аднавіцца перад тым, як карыстальнік зноў убачыць загружанае прыкладанне.
applicationDidBecomeActive – гэты статус паказвае, што праграма толькі што стала актыўнай пасля аднаўлення на пярэдні план, гэта метад, які можна выкарыстоўваць для дадатковых карэкціровак карыстальніцкага інтэрфейсу або аднаўлення карыстальніцкага інтэрфейсу ў зыходны стан і г.д. гэты метад сапраўды адбываецца калі карыстальнік ужо можа бачыць на дысплеі, таму неабходна вызначыць з балансу, што адбываецца ў гэтым метадзе і ў папярэднім метадзе. Яны выклікаюцца адзін за адным з розніцай у некалькі мілісекунд.
applicationWillTerminate - гэты стан адбываецца за некалькі мілісекунд да завяршэння працы прыкладання, гэта значыць да фактычнага завяршэння працы прыкладання. Альбо ўручную з шматзадачнасці, альбо пры выключэнні прылады. Гэты метад варта выкарыстоўваць для захавання апрацаваных даных, а таксама для завяршэння ўсіх дзеянняў і выдалення даных, якія больш не спатрэбяцца.
applicationDidReceiveMemoryWarning - і гэта ўмова, якая тут шмат абмяркоўваецца, пры неабходнасці iOS выдаліць прыкладанне з памяці, калі яно выкарыстоўвае сістэмныя рэсурсы без неабходнасці. Я дакладна не ведаю, што iOS робіць з фонавымі праграмамі, але калі ёй патрэбна праграма для вызвалення рэсурсаў для іншых працэсаў, яна прапануе ёй з папярэджаннем памяці вызваліць рэсурсы, якія яна захоўвае. Такім чынам, гэты метад выклікаецца ў дадатку, і распрацоўшчыкі павінны рэалізаваць яго так, каб прыкладанне адмаўлялася ад памяці, якая ў яго ёсць, захоўвала апрацаваныя і выдаляла з памяці непатрэбныя даныя, а іншым чынам адэкватна вызваляла памяць. Гэта праўда, што многія распрацоўшчыкі, напрыклад, пачаткоўцы, не задумваюцца над такімі рэчамі або не разумеюць іх, і тады можа здарыцца так, што іх прылажэнне паставіць пад пагрозу тэрмін службы батарэі і/або залішне спажывае сістэмныя рэсурсы нават у фонавым рэжыме. Я не ведаю, як павядзе сябе iOS, калі праграма нічога не робіць пасля атрымання папярэджання аб памяці і працягвае спажываць сістэмныя рэсурсы, як і раней.
Гэтыя некалькі станаў і звязаных з імі метадаў ляжаць у аснове ўсёй "шматзадачнасці" ў iOS... гэта выдатная сістэма, калі распрацоўшчыкі не ігнаруюць неабходнасць несці адказнасць за тое, што прыкладанні будуць ствараць на прыладах сваіх карыстальнікаў, калі яны згорнутыя або атрымліваць папярэджанні ад сістэмы і многае іншае ...
Спадзяюся, гэта кароткае апісанне дапаможа вам зразумець, як прыкладанне ўдзельнічае ў бесперабойнай працы ўсяго. Такім чынам, амаль можна сказаць, што гэта памылка няправільнага выкарыстання карыстальнікам, што можна зразумець так: калі вы выкарыстоўваеце пераважна бясплатныя праграмы ад распрацоўшчыкаў-аматараў у вялікай колькасці, ваша прылада iOS будзе працаваць горш, чым калі вы выкарыстоўваеце вялікую колькасць бясплатных і платных прыкладанняў ад вопытных або прафесійных распрацоўшчыкаў. Гэта не значыць, што ў абодвух колах няма выключэнняў. Напрыклад, foursquare паводзіць сябе даволі дзіўна і патрабавальна, і ў той жа час можна было чакаць, што гэта вельмі кваліфікаваныя распрацоўшчыкі, якія надаюць шмат часу кіраванню памяццю і батарэяй, але ўсё наадварот. Самая вялікая праблема 4SQ - сувязь з серверамі, якая часта завісае і перагружана. Гэта толькі прыклад таго, што нават вядомыя прыкладанні маюць праблемы, што не мяняе таго факту, што 4SQ - выдатны сэрвіс.
Атрымлівайце задавальненне ад яблыкаў!! :)
Мы дадалі інфармацыю ў артыкул з ласкавага дазволу аўтара ;-)
Прабачце, ENTER быў паўсюль паміж абзацамі, яны маглі б зрабіць што-небудзь з гэтым тут, каб каментарыі мелі хоць трохі ФАРМАТЫРАВАННЯ RICH TEXT.
ArnieX: дзякуй за каментар!!
Той Фарамір: Я толькі пра вашу праблему, я не ведаю, ці дапаможа гэта ў вашым выпадку, але я ведаю з уласнага вопыту, што калі вы закрываеце праграму (у шматзадачнасці), яна займае некалькі секунд, пакуль яна не закрыецца, так што калі вы выключыце яго, я рэкамендую пачакаць некалькі секунд (я чакаю каля 10 секунд, каб быць упэўненым), пакуль ён дакладна не скончыцца, і толькі тады я пачынаю яго зноў.
Калі ласка, я буду рады дапамагчы, калі ў мяне будзе магчымасць унесці свой уклад.
Як гэта павінна быць з Meeb, калі я заходжу праз яго ў чат ICQ або FB, ён аўтаматычна выходзіць праз 10 хвілін і я пераходжу ў аўтаномны рэжым, ці ён працягвае працаваць? дзякуй за тлумачэнне: P
Праз дзесяць хвілін злучэнне прыкладання з інтэрнэтам проста перарываецца. Аднак вы па-ранейшаму будзеце знаходзіцца ў сетцы на серверы Meeba і атрымаеце push-апавяшчэнне, калі вам хтосьці напіша. Пасля паўторнага адкрыцця прыкладання злучэнне будзе ўстаноўлена праз імгненне, і вы зможаце працягваць весела размаўляць.
Такім чынам, калі я правільна зразумеў артыкул, на які вы спасылаецеся, статыстыка датычыцца толькі збояў прыкладанняў пры іх запуску, што складае даволі невялікі працэнт выпадкаў, калі можа адбыцца збой. Такім чынам, з гэтага "даследавання" немагчыма зрабіць выснову, што iOS, на мой погляд, менш стабільная. Акрамя таго, перакладчык артыкула, узятага з Forbes, забыўся згадаць, што кампанія, якая прадстаўляе дадзеныя аб збоях прыкладанняў, падтрымліваецца ў тым ліку Google («Crittercism, які падтрымліваецца Google Ventures,...»).