Під час нормального використання додатку на передньому плані activity іноді виникають перешкоди від інших візуальних компонентів, які встановлюють activity на паузу. Наприклад, коли відкривається напівпрозора activity (типу, в стилі діалогу), попередня activity призупиняється.
Поки activity, як і раніше, все ще частково видно, але на даний час activity не у фокусі, він залишається на паузі.
Однак, як тільки activity повністю закрита перешкодою і її не видно, то вона зупиняється (це обговорюється в наступному уроці).
Як тільки ваша activity потрапляє в призупинений стан, система викликає для вашої activity метод onPause(), який дозволяє зупинити поточну activity, яка не повинна продовжуватися під час паузи (наприклад, відео), або зберігає будь-яку інформацію, яка повинна постійно зберігатися у разі, коли користувач продовжує залишати ваш додаток. Якщо користувач повертається до вашої activity із загальмованого стану, то система відновлює її і викликає метод onResume().
Примітка: Якщо ваша activity отримує виклик onPause(), то це може бути ознакою того, що activity буде припинена на мить, і користувач може повернути фокус до своєї activity. Тим не менш, це, зазвичай, є першою ознакою, що користувач залишає свою activity.
Коли напівпрозора activity приховує свою активність, система викликає onPause() і activity чекає в стані Paused (1). Якщо користувач повертається до activity, яка раніше була призупинена, то система викликає onResume() (2).
Призупинення Activity
Коли система викликає onPause() для вашої activity, це технічно означає, що ваша activity все ще частково видима, але найчастіше це ознака того, що користувач залишає activity і вона незабаром перейде в стан Stopped. Ви повинні, як правило, використовувати зворотній виклик onPause() для:
• Зупинки анімації або інших поточних дій, які можуть навантажувати центральний процесор.
• Фіксації незбережених змін, але тільки якщо користувачі чекають, що такі зміни повинні постійно зберігатися, коли вони відсутні (наприклад, використання електронної пошти).
• Звільнення ресурсів системи, таких як радіомовних приймачів, модулів з датчиками (наприклад, GPS), або будь-яких ресурсів, які можуть вплинути на термін служби батареї, а ваша activity призупинена і не потрібна користувачу.
Наприклад, якщо ваш додаток використовує Camera, то метод onPause() є хорошим місцем, щоб звільнити її.
@Override
public void onPause() {
super.onPause(); // Завжди метод superclass викликається першим
// Звільнення Camera, тому що вона не потрібна, коли на паузі
// і інші activity можуть її використовувати.
if (mCamera != null) {
mCamera.release()
mCamera = null;
}
}
Як правило, ви не повинні використовувати onPause() для зберігання призначених для користувача змін (наприклад, персональної інформації у формі) на постійне збереження. Єдиний випадок, коли ви повинні зберігатися зміни користувача на постійне збереження в рамках onPause(), коли впевнені, що користувачі очікують, що зміни будуть автоматично зберігатися (наприклад, при складанні листа). Тим не менш, вам слід уникати виконання ресурсе місткої роботи протягом onPause(), такої як запис в базу даних, тому, що це може уповільнити видимий перехід до наступної activity (замість цього ви повинні виконувати операції важко завантаженого відключення під час onStop()).
Ви повинні зберігати операції, проведених в методі onPause(), відносно простими для того, щоб забезпечити якнайшвидший перехід до наступного місця призначення користувача, якщо ваша activity фактично припинилася.
Примітка: Поки ваша activity припинена, екземпляр activity продовжує жити в пам'яті і згадується, коли activity відновиться. Вам не потрібно повторно ініціалізувати компоненти, які були створені під час будь-якого з методів зворотного виклику, що ведуть до стану Resumed.
Відновлення Activity
Коли користувач відновлює свою activity зі стану Paused, система викликає метод onResume().
Пам'ятайте, що система викликає цей метод щоразу, коли ваша activity переходить на передній план, в тому числі, коли вона створена вперше. Таким чином, ви повинні реалізувати onResume() для ініціалізації компонентів, які ви звільняєте протягом onPause() і виконати будь-які інші ініціалізації, які повинні відбуватися щоразу, коли activity входить в стан Resumed (наприклад, почніть анімацію та ініціалізуйте компоненти, що використовуються тільки тоді, коли activity у фокусі користувача).
Наступний приклад onResume() є аналогом прикладу onPause(), який вище, але ініціалізує камеру, яка вивільнилася, коли activity призупинилася.
@Override
public void onResume() {
super.onResume(); // Завжди викликайте метод superclass першим
// Отримайте екземпляр Camera, коли activity стане повністю у фокусі користувача
if (mCamera == null) {
initializeCamera(); // Локальний спосіб виконати ініціалізацію camera
}
}
На завершення, коротке відео про життєвий цикл activity:
(Джерело: developer.android.com)