Процеси і потоки, фан-клуб користувачів андроїд

Коли хоча б один з компонентів програми (або все додаток) буде затребуваний, система Android запускає процес, який містить єдиний основний потік для виконання. За замовчуванням всі компоненти програми працюють в цьому процесі і потоці.







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

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

Життєвий цикл процесів

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

При виборі процесу для знищення Android оцінює відносну важливість цього процесу з точки зору користувача, т. Е. Видимий користувачеві компонент даного процесу, наприклад діяльність на передньому плані, вважається більш важливим компонентом, ніж служба, що виконується в іншому процесі. Також система в першу чергу завершить процес з діяль ності, які більше не видно на екрані, а не процес з видимими діяльностями. Тому рішення про завершення процесу залежить від стану компонентів, що виконуються в даному процесі.

Пріоритет і статус процесів

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

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







  • Активний процес (Foreground Process) - той, який потрібно для того, що користувач в даний час робить. Процес вважається активним, якщо виконується будь-яка з наступних умов:
  • процес виконує діяльність, з якою взаємодіє користувач;
  • процес виконує службу, яка пов'язана з діяльністю, з якою взаємодіє користувач;

Процеси і потоки, фан-клуб користувачів андроїд

  • процес має об'єкт Service, і виконується один з методів зворотного виклику, визначених у цьому об'єкті;
  • процес має об'єкт BroadcastReceiver, і виконується його метод зворотного виклику для прийому наміри.

Одночасно можуть існувати тільки декілька пріоритетних процесів. Вони будуть знищені тільки в крайньому випадку - якщо пам'яті настільки мало, що вони всі разом не в змозі продовжувати роботу.

  • Відомий процес (Visible Process) - той, який не має ніяких пріоритетних компонентів. Компонент з цього процесу ще може викликатися користувачем. Процес, як вважають, є видимим, якщо виконується будь-яка з наступних умов:
  • це процес діяльності, яка не перебуває у фокусі, але все ще видно користувачеві. Це може статися, наприклад, при виклику діалогу, який не займає весь екран, а діяльність втратила фокус, але видно користувачеві і знаходиться позаду діалогу;
  • це служба, яка в даний момент пов'язана з діяльністю, що знаходиться на передньому плані (або частково закритою іншою діяльністю).
  • Відомий процес вважаються важливим і не буде знищений, поки залишаються процеси з більш низьким пріоритетом.

Якщо в одному процесі виконуються кілька компонентів, Android визначає пріоритет процесу по компоненту з найвищим пріоритетом. Наприклад, якщо в процесі виконується служба і видима діяльність, процес буде ранжований як видимий, а не сервісний процес.

Якщо від деякого процесу залежать інші процеси, його ранг також може бути збільшений. Процес, який обслуговує інший процес, ніколи не може мати пріоритет нижче, ніж процес, який він обслуговує. Наприклад, якщо контентпровайдер в процесі А обслуговує клієнта в процесі В або якщо служба в процесі А пов'язана з компонентом в процесі В, то процес А отримає пріоритет не менш, ніж пріоритет процесу В.

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







Схожі статті