Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лаборторна робота №3.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
1.88 Mб
Скачать

Лаборторна робота №3

Тема: Життєвий цикл Activity.

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

відстежувати основні переходи життєвого циклу QuizActivity

Прилади і матеріали:

  • пакет Java Development Kit( JDK8);

  • Eclipse — інтегроване середовище розробки для Android;

  • Android Developer Tools ADT — плагін для Eclipse;

  • Android SDK

Хід роботи

У кожного екземпляра Activity є життєвий цикл. Під час цього життєвого циклу активність переходить між трьома можливими станами: виконання, призупинення і зупинка. Для кожного переходу у Activity існує метод, який оповіщає активність про зміну стану. На мал. 3.1 зображений життєвий цикл активності, стани і методи.

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

Один з таких методів вам вже знаком — це метод onCreate(Bundle). ОС викликає цей метод після створення екземпляра активності, але до його відображення на екрані.

Як правило, активність перевизначає onCreate(.) для підготовки призначеного для користувача інтерфейсу :

  • заповнення віджетів і їх виведення на екран(виклик setContentView(int));

  • отримання посилань на заповнені віджети;

  • призначення слухачів віджетам для обробки взаємодії з користувачем;

  • підключення до зовнішніх даних моделі.

Важливо розуміти, що ви ніколи не викликаєте onCre - ate(.) або інші методи життєвого циклу Activity у своїх застосуваннях. Ви перевизначаєте їх в субкласах активності, а Android викликає їх в потрібний момент часу.

Реєстрація подій життєвого циклу Activity

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

Створення повідомлень в журналі

У Android клас android.util.Log відправляє журнальні повідомлення в загальний журнал системного рівня. Клас Log надає декілька методів реєстрації повідомлень. Наступний метод найчастіше зустрічається:

public static int d(String tag, String msg)

Ім'я «d» означає «debug»(відладка) і відноситься до рівня реєстрації повідомлень. (Рівні Log детальніше розглядаються в останній лабораторній роботі.) Перший параметр визначає джерело повідомлення, а другий — його вміст.

Перший рядок зазвичай містить константу TAG, значенням якої є ім'я класу. Це дозволяє легко визначити джерело конкретного повідомлення.

У файлі QuizActivity.java додайте константу TAG в QuizActivity.

Лістинг 3.1. Додавання константи TAG(QuizActivity.java)

...

Якщо Eclipse видасть помилку, що відноситься до класу Log, натисніть Command+Shift+O(Ctrl+Shift+O) для проведення організації імпорту. Eclipse запропонує вибрати клас, що імпортується; виберіть android.util.Log.

Тепер перевизначите ще п'ять методів в QuizActivity.

Лістинг 3.3. Перевизначення методів життєвого циклу(QuizActivity.java)

} // Кінець onCreate(Bundle)

@Override

public void onStart() {

super.onStart();

Log.d(TAG, "onStart() called");

}

@Override

public void onPause() {

super.onPause();

Log.d(TAG, "onPause() called");

}

@Override

public void onResume() {

super.onResume();

Log.d(TAG, "onResume() called");

}

@Override

public void onStop() {

super.onStop();

Log.d(TAG, "onStop() called");

}

@Override

public void onDestroy() {

super.onDestroy();

Log.d(TAG, "onDestroy() called");

}

}

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

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

public class QuizActivity extends Activity {

@Override

public void onCreat(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_quiz);

}

...

Клас Activity не містить метод onCreat(Bundle), тому компілятор видає попередження. Це дозволить вам виправити друкарську помилку замість того, щоб випадково

реалізувати QuizActivity.onCreat(Bundle).

Використання LogCat

Щоб проглянути системний журнал під час роботи додатка, використайте LogCat — програму, включену в інструментарій Android SDK.

Щоб запустити LogCat, виконаєте команду Window-Show View-Other... У теці

Android знайдіть і виділіть LogCat, потім клацніть на кнопці OK(мал. 3.2).

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

Щоб перемістити панель, перетягнете корінець панелі LogCat на панель інструментів в правому нижньому кутку інструментального вікна(мал. 3.3).

Панель LogCat закривається, а її значок

Мал. 3.2. Пошук програми LogCat з'являється на панелі інструментів. Клацніть на значку; LogCat відкривається

у нижній частині вікна.

Інструментальне вікно Eclipse повинне виглядати приблизно так, як показано на мал. 3.4. Ви можете змінити розміри внутрішніх панелей LogCat, перетягуючи їх межі мишею(це відноситься до будь-яких панелей в інструментальному вікні Eclipse).

Запустіть GeoQuiz; на панелі LogCat почнуть швидко з'являтися повідомлення. Більшість з них генерується системою. Прокрутіть список і знайдіть свої повідомлення. У стовпці TAG панелі LogCat виводиться константа TAG, визначена

для QuizActivity.

(Якщо ніякі повідомлення не виводяться, можливо, LogCat відстежує не той пристрій. Виконайте команду Window-Show View-Other... і відкрийте панель Devices. Виберіть пристрій, на якому працює програма, і поверніться до LogCat.)

Щоб спростити пошук повідомлень, можна відфільтрувати виведення по константі TAG. У LogCat клацніть на зеленому значку + у верхній частині лівої внутрішньої панелі; ця кнопка створює фільтр повідомлень. Введіть ім'я фільтру QuizActivity і введіть рядок QuizActivity в поле by Log Tag :(мал. 3.5).

Мал. 3.3. Перетягання корінця LogCat на панель інструментів в правому нижньому кутку

Мал. 3.4. Інструментальне вікно Eclipse з панеллю LogCat

Мал. 3.5. Створення фільтру в LogCat

Клацніть на кнопці OK; відкривається нова вкладка, в якій виводяться тільки сполучення з міткою QuizActivity(мал. 3.6). Після запуску GeoQuiz були викликані три методи життєвого циклу і був створений початковий екземпляр QuizActivity.

Мал. 3.6. Запуск GeoQuiz супроводжується створенням, запуском і продовженням активності

(Якщо ви не бачите відфільтрований список, виберіть фільтр QuizActivity на лівій панелі LogCat.)

А тепер трохи поекспериментуємо. Натисніть на пристрої кнопку Back, а потім перевірте виведення LogCat. Активність додатка отримала виклики onPause(),

onStop() і onDestroy().

Мал. 3.7. Натиснення кнопки Back призводить до знищення активності

Натискаючи кнопку Back, ви повідомляєте Android: «Я завершив роботу з активністю, і вона мені більше не потрібна». Android знищує активність, щоб не уникнути неефективного витрачання обмежених ресурсів пристрою.

Перезапустіть додаток GeoQuiz. Натисніть кнопку Home і перевірте виведення LogCat. Ваша активність отримала виклики onPause() і onStop(), але не виклик

onDestroy().

Мал. 3.8. Натиснення кнопки Home зупиняє активність

Викличте на пристрої диспетчер завдань. На нових пристроях для цього слід натиснути кнопку Recents поряд з кнопкою Home(мал. 3.9). На пристроях без кнопки Recents виконаєте довге натиснення кнопки Home.

Кнопка Home

Кнопка Back Кнопка Recents

Мал. 3.9. Кнопки Home, Back і Recents

У диспетчерові завдань натисніть на додатку GeoQuiz і перевірте виведення LogCat. Активність запускається і продовжує роботу, але створювати її не треба.

Натиснення кнопки Home повідомляє Android: «Я зараз займуся іншою справою, але потім можу повернутися». Android призупиняє активність, але намагається не знищувати її на випадок повернення.

Проте існування зупиненої активності не гарантоване. Якщо системі знадобиться зайнята пам'ять, вона знищує зупинені активності.

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

Далі ми перевизначатимемо різні методи життєвого циклу активності для вирішення реальних завдань. При цьому застосування кожного методу розглядатиметься детальніше.