Життєвий цикл додатки на android

Життєвий цикл додатки на android

Життєвий цикл додатки в Android жорстко контролюється системою і залежить від потреб користувача, доступних ресурсів і т. Д. Наприклад, користувач хоче запустити браузер. Рішення про запуск програми приймає система. Хоча останнє слово і залишається за системою, вона підпорядковується певним заданим і логічним правилам, що дозволяє визначити, чи можна завантажити, призупинити додаток або припинити його роботу. Якщо в даний момент користувач працює з певним вікном, система дає пріоритет відповідного додатку. І навпаки, якщо вікно невидимо і система вирішує, що роботу програми необхідно зупинити, щоб мобілізувати додаткові ресурси, буде припинено роботу програми, що має більш низький пріоритет. В Android ресурси більш обмежені, тому Android більш жорстко контролює роботу додатків.

Основні методи життєвого циклу додатки

  • protected void onCreate ()
  • protected void onStart ()
  • protected void onRestart ()
  • protected void onResume ()
  • protected void onPause ()
  • protected void onStop ()
  • protected void onDestroy ();

onCreate ()

Метод onCreate () викликається при створенні або перезапуску активності. Система може запускати і зупиняти поточні вікна в залежності від подій, що відбуваються. Усередині даного методу налаштовують статичний інтерфейс активності. Ініціалізує статичні дані активності, пов'язують дані зі списками і т.д. Пов'язує з необхідними даними і ресурсами. Задає зовнішній вигляд через метод setContentView ().

У цьому методі завантажуйте призначений для користувача інтерфейс, розміщуйте посилання на властивості класу, зв'язуйте дані з елементами управління, створюйте сервіси і потоки. Метод onCreate () приймає об'єкт Bundle. що містить стан призначеного для користувача інтерфейсу, збережене в останньому виклику обробника onSaveInstanceState. Для відновлення графічного інтерфейсу в його попередньому стані потрібно задіяти цю змінну: всередині onCreate () або перевизначивши метод onRestoreInstanceState ().

Операції по ініціалізації, що займають багато часу, слід виконувати у фоновому процесі, а не за допомогою методу onCreate (). В іншому випадку можна отримати діалогове вікно ANR (Application Not Responding, не реагує на).

У методі можна зробити перевірку, запущено чи додаток вперше або відновлено з пам'яті. Якщо значення змінної savedInstanceState буде null. додаток запускається перший раз:

А значення змінної currentBillTotal можна зберегти в методі onSaveInstanceState ():

За onCreate () завжди слід виклик onStart (). але перед onStart () не обов'язково повинен йти onCreate (). так як onStart () може бути викликана і для відновлення роботи припиненого додатки (додаток зупиняється методом onStop ()). При виклику onStart () вікно ще не видно користувачеві, але незабаром буде видно. Викликається безпосередньо перед тим, як активність стає видимою користувачу. Супроводжується викликом методу onResume (). якщо активність отримує передній план, або викликом методу onStop (). якщо стає прихованою.

onResume ()

Майте на увазі, що система викликає цей метод кожен раз, коли ваша активність йде на передньому плані, в тому числі, при першому створенні. Таким чином, ви повинні реалізувати onResume () для ініціалізації компонентів, реєстрації будь-яких широкомовних приймачів або інших процесів, які ви звільнили / призупинили в onPause () і виконувати будь-які інші ініціалізації, які повинні відбуватися, коли активність знову активна.

Намагайтеся розміщувати відносно швидкий і легкий код, щоб ваше залишити програму чуйним при приховуванні з екрану або виході на передній план.

Вам не потрібно перезавантажувати стан призначеного для користувача інтерфейсу всередині нього, так як ці функції покладені на обробники onCreate () і onRestoreInstanceState.

Наприклад, після методу onPause (). в якому ми призупинили роботу камери (див. нижче) знову запускаємо камеру:

У цьому методі необхідно зупинити анімацію та інші дії, які завантажують процесор. Зафіксувати незбережені дані, наприклад, чернетка листа, тому як після його виконання робота активності може перерватися без попередження. Звільнити системні ресурси, наприклад, обробку даних від GPS.

Намагайтеся розміщувати відносно швидкий і легкий код, щоб ваше залишити програму чуйним при приховуванні з екрану або виході на передній план.

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

Наприклад, при роботі з камерою метод використовується наступним чином:

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

Коли активність припинена, то всі компоненти зберігаються в пам'яті і при відновлення немає необхідності повторно форматувати їх.

Метод onStop () викликається, коли вікно стає невидимим для користувача. Це може статися при її знищення, або якщо була запущена інша активність (існуюча або нова), що перекрила вікно поточної активності. Завжди супроводжує будь-який виклик методу onRestart (). якщо активність повертається, щоб взаємодіяти з користувачем, або методу onDestroy (). якщо ця активність знищується.

Примітка: Навіть якщо система закрила вашу активність, коли вона була зупинена, вона як і раніше зберігає стан об'єктів, таких як текст в EditText в спеціальному об'єкті Bundle (у вигляді ключ-значення) і відновлює їх, якщо користувач переходить назад до того ж екземпляру активності.

У цьому методі можна зробити складні операції по збереженню даних: для припинення складної анімації, потоків, відстеження показників датчиків, запитів до GPS, таймерів, сервісів або інших процесів, які потрібні виключно для поновлення користувальницького інтерфейсу. Немає сенсу споживати ресурси (такти центрального процесора або мережевий трафік) для поновлення інтерфейсу, в той час як його не видно на екрані. Застосуйте методи onStart () або onRestart () для відновлення або повторного запуску цих процесів, коли активність знову стане видимою.

При нестачі пам'яті система може знищити приховану активність, минаючи метод onStop () з викликом методу onDestroy ().

onRestart ()

Якщо вікно повертається в пріоритетний режим після виклику onStop (). то в цьому випадку викликається метод onRestart (). Тобто викликається після того, як активність була зупинена і знову була запущена користувачем. Завжди супроводжується викликом методу onStart ().

onRestart передує викликам методу onStart () (крім самого першого). Використовуйте його для спеціальних дій, які повинні виконуватися тільки при повторному запуску активності в рамках «повноцінного» стану.

onDestroy ()

Метод викликається після закінчення роботи активності, при виклику методу finish () або в разі, коли система знищує цей екземпляр активності для звільнення ресурсів. Ці два сценарії знищення можна визначити викликом методу isFinishing (). Викликається перед знищенням активності. Це останній запит, який отримує активність від системи. Якщо певний вікно знаходиться у верхній позиції в стеці, але невидимо користувачеві і система вирішує завершити це вікно, викликається метод onDestroy (). У цьому випадку метод видаляє всі статичні дані активності. Віддає все використовувані ресурси.

Так як всі необхідні операції зі звільнення ресурсів ви зробили в методі onStop (). то в цьому методі ви можете підстрахуватися і перевірити ще раз всі неосвобождённие ресурси.

На практиці вам найчастіше доводиться стикатися з методами onCreate (). onResume () і onPause (). Метод onCreate () буде викликатися при створенні користувальницького інтерфейсу для роботи з вікном. Даний метод дозволить вам пов'язувати дані з компонентами і підключати обробники подій до компонентів призначеного для користувача інтерфейсу. За допомогою onPause () ви зможете зберегти важливу інформацію в базі даних вашого застосування. Це останній безпечний метод, який буде викликатися перед тим, як система завершить роботу програми. Метод onDestroy () не обов'язково буде викликатися, тому не покладайтеся на цей метод при реалізації критичному логіки.

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

Код для методів:

Запускайте проект і стежте за повідомленнями. Вони будуть спливати в потрібній послідовності, даючи вам уявлення про життєвий цикл програми. Також повідомлення будуть транслюватися в вікно logcat на вкладці 6.Android в студії. Зверніть увагу на наступний момент. Коли ваше додаток запущено, то натисніть на першу кнопку, щоб змінити текст в TextView. Потім натисніть кнопку Home (НЕ Back!), Щоб потрапити на Домашній екран. Після чого знову запустіть вашу програму. Ви побачите, що програма не викликає метод onCreate (). а текст в TextView буде свідчити, що програма не була закрита, а тільки згорнуто. Це дуже важливий момент, який потрібно зрозуміти. Розуміння цих речей допоможе вам правильно вибудовувати логіку програми.

Натискаємо кнопку Назад для виходу з програми

Натиснута кнопка Додому

Після натискання кнопки Додому, коли додаток запущено зі списку недавно відкритих додатків або через значок

Коли запускається інший додаток з області повідомлень або відкривається додаток Налаштування

Натиснута кнопка Назад в іншому додатку або в Настройках і ваше додаток стало знову видимим.

Відкривається діалогове вікно

Діалогове вікно закривається

Користувач відповідає на дзвінок

Екран знову включений

На китайських планшетах іноді спостерігав, коли якісь методи не спрацьовували.

При повороті активність проходить через ланцюжок різних станів. Порядок наступний.

onPause ()
onStop ()
onDestroy ()
onCreate ()
onStart ()
onResume ()

порядок викликів

Після onCreate () - onStart ()

Після onRestart () - onStart ()

Після onStart () - onResume () або onStop ()

Після onResume () - onPause ()

Після onPause () - onResume () або onStop ()

Після onStop () - onRestart () або onDestroy ()

Після onDestroy () - нічого

додаткове читання

Схожі статті