Затвори рекламата

Все още има много хора, които не знаят как работи многозадачността в iOS. Като за начало обаче е необходимо да се отбележи, че това не е истински мултитаскинг, а много умно решение, което не натоварва нито системата, нито потребителя.

Често можете да чуете суеверия, че приложенията, работещи във фонов режим в iOS, запълват оперативната памет, което води до забавяне на системата и живот на батерията, така че потребителят трябва да ги изключи ръчно. Лентата за многозадачност всъщност не съдържа списък на всички работещи фонови процеси, а само най-скоро стартираните приложения. Така че потребителят не трябва да се тревожи за процеси, работещи във фонов режим, освен в няколко случая. При натискане на Home бутона обикновено приложението заспива или се затваря, за да не товари повече процесора или батерията и при необходимост освобождава необходимата памет.

Така че това не е пълноценна многозадачност, когато имате десетки работещи процеси. Само едно приложение винаги работи на преден план, което се поставя на пауза или се изключва напълно, ако е необходимо. Само няколко вторични процеса работят във фонов режим. Ето защо рядко ще срещнете срив на приложение на iOS, например Android е затрупан с работещи приложения, за които потребителят трябва да се грижи. От една страна, това прави работата с устройството неприятна, а от друга, причинява например бавно стартиране и преходи между приложения.

Тип време за изпълнение на приложението

Приложението на вашето iOS устройство е в едно от тези 5 състояния:

  • Работи: приложението се стартира и работи на преден план
  • Заден план: все още работи, но работи във фонов режим (можем да използваме други приложения)
  • Спряно: Все още използва RAM, но не работи
  • Неактивен: приложението работи, но непреки команди (например, когато заключите устройството с работещо приложение)
  • Не работи: Приложението е прекратено или не е започнало

Объркването идва, когато приложението отиде на заден план, за да не безпокои. Когато натиснете бутона Начало или използвате жеста, за да затворите приложението (iPad), приложението преминава на заден план. Повечето приложения се спират в рамките на секунди (Те се съхраняват в RAM на iDevice, така че да могат да се стартират бързо, те не натоварват процесора толкова много и по този начин спестяват живота на батерията) Може да си помислите, че ако дадено приложение продължи да използва памет, имате да го изтриете ръчно, за да го освободите. Но не е нужно да правите това, защото iOS ще го направи вместо вас. Ако имате изискващо приложение, спряно във фонов режим, като например игра, която използва голямо количество RAM, iOS автоматично ще го премахне от паметта, когато е необходимо, и можете да го рестартирате, като докоснете иконата на приложението.

Нито едно от тези състояния не се отразява в лентата за многозадачност, панелът показва само списък с наскоро стартирани приложения, независимо дали приложението е спряно, на пауза или работи във фонов режим. Може също да забележите, че приложението, което работи в момента, не се показва в панела за многозадачност

Фонови задачи

Обикновено, когато натиснете бутона Начало, приложението ще работи във фонов режим и ако не го използвате, автоматично ще спре на пауза в рамките на пет секунди. Така че, ако изтегляте подкаст, например, системата го оценява като работещо приложение и забавя прекратяването с десет минути. Най-късно след десет минути процесът се освобождава от паметта. Накратко, не е нужно да се притеснявате, че ще прекъснете изтеглянето си с натискане на бутона Начало, ако не отнема повече от 10 минути, за да го завършите.

Неопределено време работи във фонов режим

В случай на неактивност системата прекратява приложението в рамките на пет секунди, а в случай на изтегляне прекратяването се забавя с десет минути. Въпреки това, има малък брой приложения, които изискват работа във фонов режим. Ето някои примери за приложения, които могат да работят във фонов режим за неопределено време в iOS 5:

  • Приложения, които възпроизвеждат звук и трябва да бъдат прекъснати за известно време (поставяне на музика на пауза по време на телефонен разговор и др.),
  • Приложения, които проследяват вашето местоположение (навигационен софтуер),
  • Приложения, получаващи VoIP повиквания, например ако използвате Skype, можете да получите обаждане дори когато приложението е във фонов режим,
  • Автоматично изтегляне (напр. Newsstand).

Всички приложения трябва да бъдат затворени, ако вече не изпълняват задача (като изтегляне във фонов режим). Има обаче изключения, които работят във фонов режим непрекъснато, като родното приложение за поща. Ако работят във фонов режим, те заемат памет, използване на процесора или намаляват живота на батерията

Приложенията, на които е разрешено да работят във фонов режим за неопределено време, могат да правят всичко, което правят, докато работят, от възпроизвеждане на музика до изтегляне на нови подкаст епизоди.

Както споменах преди, потребителят никога не трябва да затваря приложенията, работещи във фонов режим. Единственото изключение от това е, когато приложение, работещо във фонов режим, се срине или не се събуди правилно от заспиване. След това потребителят може да затвори приложенията ръчно в лентата за многозадачност, но това се случва рядко.

Така че, като цяло, не е необходимо да управлявате фонови процеси, защото системата сама ще се погрижи за тях. Ето защо iOS е толкова свежа и бърза система.

От гледна точка на разработчика

Приложението може да реагира с общо шест различни състояния като част от многозадачността:

1. applicationWillResignActive

В превод това състояние означава, че приложението ще се оттегли като активно приложение (т.е. приложението на преден план) в бъдеще (въпрос на няколко милисекунди). Това се случва например при получаване на обаждане, докато използвате приложението, но в същото време този метод причинява това състояние и преди приложението да премине на заден план, така че трябва да вземете предвид тези промени. Този метод също е подходящ, така че например да спре всички дейности, които извършва, когато има входящо повикване и да изчака до края на разговора.

2. applicationDidEnterBackground

Състоянието показва, че приложението е преминало на заден план. Разработчиците трябва да използват този метод, за да спрат всички процеси, които не е задължително да работят във фонов режим и да изчистят паметта от неизползвани данни и други процеси, като изтичащи таймери, изчистване на заредени изображения от паметта, които не е задължително да са необходими, или затваряне връзки със сървъри, освен ако не е критично за приложението да осъществява връзки във фонов режим. Когато методът се извиква в приложение, той по същество трябва да се използва за пълно спиране на приложението, ако част от него не се изисква да работи във фонов режим.

3. applicationWillEnterForeground

Това състояние е обратното на първото състояние, при което приложението ще премине в активно състояние. Състоянието просто означава, че спящото приложение ще се възобнови от заден план и ще се появи на преден план в рамките на следващите няколко милисекунди. разработчиците трябва да използват този метод, за да възобновят всички процеси, които са били неактивни, докато приложението е било във фонов режим. Връзките към сървърите трябва да се възстановят, таймерите да се нулират, изображенията и данните да се заредят в паметта, а други необходими процеси могат да се възобновят точно преди потребителят да види отново зареденото приложение.

4. приложение DidBecomeActive

Състоянието показва, че приложението току-що е станало активно, след като е било възстановено на преден план. Това е метод, който може да се използва за допълнителни корекции на потребителския интерфейс или за възстановяване на потребителския интерфейс до първоначалното му състояние и т.н. Това всъщност се случва в момента, когато потребителят вече вижда приложението на дисплея, така че е необходимо да определете внимателно какво се случва в метода на този и в предишния метод. Те се извикват един след друг с разлика от няколко милисекунди.

5. applicationWillTerminate

Това състояние се случва няколко милисекунди преди приложението да излезе, т.е. преди приложението действително да приключи. Или ръчно от многозадачност, или при изключване на устройството. Методът трябва да се използва за запазване на обработени данни, за прекратяване на всички дейности и за изтриване на данни, които вече няма да са необходими.

6. applicationDidReceiveMemoryWarning

Последното състояние е най-обсъжданото. Той отговаря, ако е необходимо, да премахне приложението от паметта на iOS, ако използва системни ресурси ненужно. Не знам конкретно какво прави iOS с фоновите приложения, но ако има нужда от приложение за освобождаване на ресурси към други процеси, то го подканва с предупреждение за паметта да освободи всички ресурси, които има. Така че този метод се извиква в приложението. Разработчиците трябва да го внедрят така, че приложението да се откаже от паметта, която е разпределило, да записва всичко, което се извършва, да изчиства ненужните данни от паметта и по друг начин да освобождава адекватно памет. Вярно е, че много разработчици, дори и начинаещи, не се замислят и не разбират подобни неща и тогава може да се случи приложението им да застраши живота на батерията и/или да консумира ненужно системни ресурси, дори във фонов режим.

Присъда

Тези шест състояния и свързаните с тях методи са фонът на всички „многозадачности“ в iOS. това е страхотна система, стига разработчиците да не пренебрегват факта, че има нужда да бъдат отговорни за това, което приложението изхвърля на устройствата на техните потребители, дали те са минимизирани или получават предупреждения от системата и т.н.

Източник: Macworld.com

автори: Якуб Пожарек, Мартин Доубек (ArnieX)

 
Вие също имате ли проблем за решаване? Имате ли нужда от съвет или може би да намерите правилното приложение? Не се колебайте да се свържете с нас чрез формата в секцията Консултации, следващия път ще отговорим на въпроса ви.

.