Закрити оголошення

Є ще багато людей, які не знають, як працює багатозадачність в iOS. Однак для початку варто зазначити, що це не справжня багатозадачність, а дуже розумне рішення, яке не обтяжує ні систему, ні користувача.

Часто можна почути забобони про те, що додатки, що працюють у фоновому режимі в iOS, заповнюють оперативну пам'ять, що призводить до уповільнення роботи системи та роботи батареї, тому користувачеві доводиться вимикати їх вручну. На панелі багатозадачності насправді міститься не список усіх запущених фонових процесів, а лише останні запущені програми. Тож користувачеві не потрібно турбуватися про процеси, що працюють у фоновому режимі, за винятком кількох випадків. Коли ви натискаєте кнопку «Додому», програма зазвичай переходить у сплячий режим або закривається, щоб більше не навантажувати процесор чи батарею та, якщо необхідно, звільнити необхідну пам’ять.

Тому це не повноцінна багатозадачність, коли у вас запущені десятки процесів, на передньому плані завжди працює лише одна програма, яка при необхідності призупиняється або повністю вимикається. Лише кілька вторинних процесів працюють у фоновому режимі. Ось чому ви рідко зустрінете збій програми на iOS, наприклад, Android переповнений запущеними програмами, про які користувач повинен піклуватися. З одного боку, це робить роботу з пристроєм неприємною, а з іншого — викликає, наприклад, повільний запуск і переходи між додатками.

Тип виконання програми

Програма на вашому пристрої iOS перебуває в одному з цих 5 станів:

  • Запуск: програма запускається та працює на передньому плані
  • фон: він все ще працює, але працює у фоновому режимі (ми можемо використовувати інші програми)
  • Призупинено: Все ще використовує оперативну пам’ять, але не працює
  • Неактивний: програма працює, але непрямі команди (наприклад, коли ви блокуєте пристрій із запущеною програмою)
  • Не працює: Додаток завершився або не почався

Плутанина виникає, коли програма переходить у фоновий режим, щоб не заважати. Коли ви натискаєте кнопку Home або використовуєте жест, щоб закрити програму (iPad), програма переходить у фоновий режим. Більшість програм призупиняється протягом кількох секунд (Вони зберігаються в оперативній пам’яті iDevice, щоб їх можна було швидко запустити, вони не навантажують процесор надто багато й, таким чином, зберігають заряд акумулятора). Ви можете подумати, що якщо програма продовжує використовувати пам’ять, ви маєте видалити вручну, щоб звільнити. Але ви не повинні цього робити, тому що iOS зробить це за вас. Якщо у вас у фоновому режимі призупинено вимогливу програму, як-от гра, яка використовує великий обсяг оперативної пам’яті, iOS автоматично видалить її з пам’яті, коли це необхідно, і ви зможете перезапустити її, торкнувшись піктограми програми.

Жоден із цих станів не відображається на панелі багатозадачності, на панелі відображається лише список нещодавно запущених програм, незалежно від того, чи програма зупинена, призупинена чи працює у фоновому режимі. Ви також можете помітити, що запущена програма не відображається на панелі багатозадачності

Фонові завдання

Зазвичай, коли ви натискаєте кнопку «Додому», програма працюватиме у фоновому режимі, а якщо ви нею не користуєтеся, вона автоматично призупиняється протягом п’яти секунд. Тому, наприклад, якщо ви завантажуєте подкаст, система оцінює його як запущену програму та відкладає припинення на десять хвилин. Щонайпізніше через десять хвилин процес вивільняється з пам’яті. Коротше кажучи, вам не потрібно турбуватися про переривання завантаження натисканням кнопки «Додому», якщо для його завершення потрібно не більше 10 хвилин.

Безстрокова робота у фоновому режимі

У разі бездіяльності система припиняє роботу програми протягом п’яти секунд, а у випадку завантажень – припинення затримується на десять хвилин. Однак існує невелика кількість програм, які потребують роботи у фоновому режимі. Ось кілька прикладів програм, які можуть працювати у фоновому режимі необмежений час в iOS 5:

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

Усі програми слід закрити, якщо вони більше не виконують завдання (наприклад, фонове завантаження). Однак є винятки, які постійно працюють у фоновому режимі, як-от рідна програма Mail. Якщо вони працюють у фоновому режимі, вони займають пам’ять, процесор або скорочують час роботи батареї

Програми, яким дозволено працювати у фоновому режимі необмежений час, можуть робити все, що вони роблять під час роботи, від відтворення музики до завантаження нових епізодів Podcast.

Як я вже згадував раніше, користувачеві ніколи не потрібно закривати програми, що працюють у фоновому режимі. Єдиним винятком є ​​випадки, коли програма, що працює у фоновому режимі, аварійно завершує роботу або не виходить із режиму сну належним чином. Потім користувач може закривати програми вручну на панелі багатозадачності, але це трапляється рідко.

Отже, загалом, вам не потрібно керувати фоновими процесами, оскільки система подбає про них сама. Ось чому iOS є такою свіжою та швидкою системою.

З точки зору розробника

Програма може реагувати на шість різних станів у рамках багатозадачності:

1. applicationWillResignActive

У перекладі цей стан означає, що програма припинить роботу як активна програма (тобто програма на передньому плані) у майбутньому (питання кількох мілісекунд). Це трапляється, наприклад, під час отримання дзвінка під час використання програми, але в той же час цей метод також викликає цей стан до того, як програма перейде у фоновий режим, тому вам потрібно враховувати ці зміни. Цей метод також підходить для того, щоб, наприклад, він призупиняв усі дії, які виконує, коли надходить вхідний дзвінок, і чекав до кінця розмови.

2. додатокDidEnterBackground

Статус вказує на те, що програма перейшла у фоновий режим. Розробники повинні використовувати цей метод, щоб призупинити всі процеси, які не обов’язково повинні виконуватися у фоновому режимі, і очистити пам’ять від невикористаних даних та інших процесів, таких як таймери, що закінчуються, очищення завантажених зображень із пам’яті, які не обов’язково знадобляться, або закриття підключення до серверів, якщо для програми не критично виконувати підключення у фоновому режимі. Коли метод викликається в програмі, він, по суті, повинен використовуватися для повного призупинення програми, якщо якась її частина не вимагається працювати у фоновому режимі.

3. додатокWillEnterForeground

Цей стан протилежний першому стану, коли програма перейде в активний стан. Стан просто означає, що спляча програма відновиться з фону та з’явиться на передньому плані протягом наступних кількох мілісекунд. розробники повинні використовувати цей метод, щоб відновити будь-які процеси, які були неактивні, поки програма працювала у фоновому режимі. Підключення до серверів слід відновити, таймери скинути, зображення та дані завантажити в пам’ять, а інші необхідні процеси можна відновити безпосередньо перед тим, як користувач знову побачить завантажену програму.

4. додаток DidBecomeActive

Стан вказує на те, що програма щойно стала активною після відновлення на передній план. Це метод, який можна використовувати для додаткових налаштувань інтерфейсу користувача або відновлення початкового стану інтерфейсу користувача тощо. Фактично це відбувається в момент, коли користувач уже бачить програму на дисплеї, тому необхідно з обережністю визначте, що відбувається в методі цього і в попередньому методі. Вони викликаються один за одним з різницею в кілька мілісекунд.

5. applicationWillTerminate

Цей стан виникає за кілька мілісекунд до виходу програми, тобто до фактичного завершення роботи програми. Або вручну з багатозадачності, або під час вимкнення пристрою. Метод слід використовувати для збереження оброблених даних, завершення всіх дій і видалення даних, які більше не будуть потрібні.

6. ApplicationDidReceiveMemoryWarning

Саме остання держава є найбільш обговорюваною. Він відповідає за, у разі необхідності, видалення програми з пам’яті iOS, якщо вона використовує системні ресурси без потреби. Я не знаю конкретно, що iOS робить із фоновими програмами, але якщо їй потрібна програма, щоб звільнити ресурси для інших процесів, вона запропонує їй за допомогою попередження про пам’ять звільнити будь-які ресурси, які вона має. Так цей метод називається в додатку. Розробники повинні реалізувати це так, щоб програма відмовлялася від виділеної пам’яті, зберігала все, що виконується, очищала непотрібні дані з пам’яті та іншим чином адекватно звільняла пам’ять. Це правда, що багато розробників, навіть початківці, не думають про такі речі та не розуміють їх, і тоді може статися, що їхня програма загрожує заряду батареї та/або надмірно споживає системні ресурси, навіть у фоновому режимі.

Вердикт

Ці шість станів і пов’язані з ними методи є основою всієї «багатозадачності» в iOS. це чудова система, якщо розробники не ігнорують той факт, що існує потреба бути відповідальним за те, що програма викидає на пристрої їхніх користувачів, якщо вони згортаються або отримують попередження від системи тощо.

Джерело: Macworld.com

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

 
Ви також маєте проблему для вирішення? Вам потрібна порада чи, можливо, знайшли правильне застосування? Не соромтеся зв'язатися з нами через форму в розділі Консультування, наступного разу ми відповімо на ваше запитання.

.