You are on page 1of 49

Розробка мобільних

застосувань під Android

Лекція 1

Лектор:
Орленко Сергій Петрович

1
Рейтингова система
оцінювання
 5 лабораторних робіт по 20 балів

2
Без МКР, без звітів
Але є але
Перший календарний контроль: 14.03.2022 −
26.03.2022 – хоча б 15 балів
Другий календарний контроль: 02.05.2022 −
15.05.2022 – хоча б 30 балів
Семестровий контроль (залік): 23.05.2022 −
05.06.2022. Допуск до заліку – 3 лаби

3
Штрафи
 За кожні зайві 2 тижні після дедлайну
по -2 бали, але не більше -10:
 Невірна відповідь на теоретичні
питання: -1 … -5
 Відсутність теоретичного бачення
виконання завдання: -1 … -20

4
Частка ринку мобільних
операційних систем у всьому світі

5
Список версій Android
Статистика на
квітень 2020 року
4.0 ▼0.2 %
4.1-4.3 ▼ 1.7 %
4.4 ▼ 4.0 %
5.0 ▼ 9.2 %
6.0 ▼ 11.2 %
7.0 ▼ 12.9 %
8.0 ▼ 21.3 %
9.0 ▲ 31.3 %
10.0 (Q) ▲ 8.2 %
11.0 (R) ▲ <1 %
12.0 (S) ▲ <1 %

6
Ваші «друзі» на цей курс

7
JDK - download
 JDK – платформа для розробки

8
9
Congratulations!

10
Структура програми під
платформу Андроїд
 Архітектура;
 Компоненти;
 Процеси;
 Активація компонентів;
 Наміри

11
Структура програми під платформу Android

Додаток на Android
1. Спеціальний файл архів з розширенням apk;
2. Являє собою набір компонентів;
3. Додаток немає точки входу як звичайний додаток
на java, тобто. немає методу main()
4. Оточення програми представлене через
контекст;
5. Кожна програма виконується в окремому процесі
під окремим користувачем у багатокористуцьокму
середовищі з мінімальними привілеями.
12
Структура програми під платформу Android

Особливості
1. Одна програма може використовувати
компоненти інших програм (якщо ці програми
дозволяють їх використовувати);
2. Додаток не містить код інших програм та
посилання на них;
3. Система повинна запустити процес додатку,
в якому знаходиться необхідний елемент, і
ініціалізувати потрібні йому об'єкти.

13
Структура програми під платформу Android
Архітектура Android додаток є фреймворк -
орієнтованою framework based ), тобто зводиться до
розширення деяких класів або реалізації інтерфейсів,
наданих фрейморком

Така програма не може бути запущена поза


фреймворком або без нього.
І) Унікальна система управління пам'яттю:
- збирач сміття може знищити об'єкти, з якими в даний
час немає взаємодії, якщо ОС вирішить, що ОП мало;
- ОС може знищити процес, який у час не показує
користувачеві ніякого графічного інтерфейсу.

14
Структура програми під платформу Android
ІІ) Обробка приховування інтерфейсів користувача та
існування кнопки «назад» на Android пристроях
призводить до необхідності наявності стека
інтерфейсів користувача, в якому поточний видимий
інтерфейс поміщається на вершину, а всі інші
зсуваються вниз.
ІІІ ) Обробка взаємодії між інтерфейсом користувача та
його логікою слідує архітектурному шаблону «Model -
View - ViewModel» ( MVVM, Модель - Представлення -
Модель представлення).

15
Структура програми під платформу Android

Інтерфейс користувача реалізується гіпертекстовою


розміткою (XML).

Логіка інтерфейсу користувача реалізується


розробником як компонент ViewModel

Функціональні зв'язки між інтерфейсом користувача і


ViewModel реалізуються через біндинги (bindings), які є
правилами типу «якщо кнопка A була натиснута, повинен 16
бути викликаний метод onButtonAClick() з ViewModel».
Структура програми під платформу Android
Компоненти Android-додатку

17
Структура програми під платформу Android

Компонент «ДІЯЛЬНІСТЬ»
Являє собою візуальний інтерфейс (вікно, екран) для
однієї дії, яку користувач може зробити.
Програма може складатися з кількох Діяльностей.
(Наприклад, у програмі обміну повідомленнями може
бути один екран, який показує список контактів, другий
екран, щоб написати повідомлення вибраному
контакту, та інші екрани, щоб робити огляд старих
повідомлень або змінити налаштування).
Кожна Діяльність може використовувати додаткові
вікна (наприклад, діалогове вікно). 18
Структура програми під платформу Android
Життєвий цикл Діяльності

19
Структура програми під платформу Android
Діяльність може бути в одному з трьох станів:
- Відновлена (​​resumed) – знаходиться на передньому
плані та має фокус для взаємодії з користувачем;
- Призупинена (paused) – втратила фокус, але все
ще видна користувачу (поверху знаходиться інша
діяльність, яка або прозора або закриває її
частково). Призупинена діяльність повністю «жива»
(стан збережений і вона прив'язана до віконного
менеджера), але може бути знищена системою у
разі нестачі пам'яті);
- Зупинена (stopped) – повністю перекрита іншою
діяльністю (більше не видна користувачеві і буде 20
знищено системою, коли знадобиться пам'ять).
Структура програми під платформу Android
Метод onCreate() викликається один раз при
створенні Діяльності (проводиться початкове
налаштування інтерфейсу, зв'язування даних,
налаштування служб та потоків, тощо).

Метод onStart() викликається для переходу Діяльності до


взаємодії з користувачем (стає видимою).

Метод onResume() передає весь фокус введення


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

Метод onPause() викликається, коли користувач вирішує


перейти до роботи з новим вікном (зупинити анімацію та
інші дії, які завантажують процесор; зафіксувати не
збережені дані; звільнити системні ресурси, наприклад, 21
обробку даних від GPS).
Структура програми під платформу Android
Метод onStop() викликається, коли вікно стає невидимим
для користувача (якщо була запущена інша Діяльність, що
перекрила вікно поточної активності; можна зберігати дані:
для призупинення складної анімації, потоків, відстеження
показань датчиків, запитів до GPS, таймерів, служб або
інших процесів, які потрібні виключно для оновлення
інтерфейсу користувача).

Метод onRestart() викликається після того, як Діяльність


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

Метод onDestroy() викликається після закінчення роботи.


Діяльність (видаляє всі статичні дані активності.
Віддає/звільняє всі використовувані ресурси).
22
Структура програми під платформу Android
Стек Діяльностей
Коли нова Діяльність запускається, вона поміщається у
вершину стека, виділеного додатку.

23
Структура програми під платформу Android
Компонент «СЛУЖБА»
Не має візуального представлення (користувацького
інтерфейсу).

Виконується у фоновому режимі протягом невизначеного


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

Програми можуть підключатися до Служби або запускати,


(якщо вона вже не працює), а також зупиняти запущені.

Коли є підключення до Служби, то звернення до її функцій


здійснюється через інтерфейс, наданий цією службою.

24
Структура програми під платформу Android

Життєвий цикл
Служб
Існує 2 форми:
- Started (запущена);

- bound (прив'язана).

25
Структура програми під платформу Android
Якщо компонент запускає Службу викликом методу
startService()(який у результаті призведе до виклику
методу onStartCommand()), то Служба буде працювати,
доки не зупинить сама себе методом stopSelf(), або поки
інший компонент не зупинить її викликом методу
stopService().

Якщо компонент викликав метод bindService() для


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

26
Структура програми під платформу Android
Процеси Android
Як тільки один із компонентів буде необхідним, система
запускає процес, що складається з одного потоку
виконання.

Усі компоненти ініціалізуються в основному потоці.

Система може завершити виконання потоку у разі нестачі


пам'яті або якщо пам'ять потрібна іншим, найважливішим
процесам.

При виборі процесу для знищення оцінюється його


важливість з точки зору користувача (тобто насамперед
завершиться процес із невидимими Діяльностями).

27
Структура програми під платформу Android
Типи процесів та їх пріоритети

28
Структура програми під платформу Android
Активний процес (процес переднього плану) - це
процес програми:
- з яким користувач взаємодіє в даний момент;

- виконує Службу, пов'язану з Діяльністю, з якою


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

29
Структура програми під платформу Android
Видимий процес - це процес, який:
- має Діяльність, видиму кінцевому користувачеві в
даний момент часу (діяльність втратила фокус
введення, але ще видна користувачеві);
- має Службу, пов'язану на даний момент з Діяльністю,
яка перебуває на передньому плані (або частково
перекрита).

Сервісний (службовий) процес - це процес, що містить,


що виконувану на даний момент Службу, яка не
відноситься до попередніх типів.

30
Структура програми під платформу Android
Фоновий процес - це процес, що містить Діяльність,
яку не видно користувачеві (є безліч фонових
процесів, робота яких завершується за принципом
"останній запущений закривається останнім").

Порожній процес - це процес, який не містить жодних


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

31
Структура програми під платформу Android

Особливості
1) Якщо одному процесі виконуються кілька компонент, то
система оцінює пріоритет процесу по компоненті з
найвищим пріоритетом;

2) Процес, який обслуговує інший процес, має пріоритет


не нижче обслуговуваного процесу;

3) Якщо для виконання фонової Діяльності необхідний


тривалий час, то її краще запустити як окрему Службу,
а не породити в потоці з цією Діяльністю (сервісний
потік має більш високий пріоритет, ніж фоновий)

32
Структура програми під платформу Android
Компонент «КОНТЕНТ-ПРОВАЙДЕР»
Дані додатку можуть зберігатися:
- у файлах,

- базі даних SQLite,

- будь-якому іншому вигляді.

Контент-провайдер забезпечує доступ до даних


програми з інших програм (тобто можна конфігурувати
власні контент-провайдери, щоб дозволити доступ до
своїх даних з інших програм; або використовувати контент-
провайдери інших програм для доступу до їх сховищ
даних).

33
Структура програми під платформу Android
Компонент «ПРИЙМАЧ
ШИРОКОМОВНИХ НАМІРІВ»
Використовується для отримання зовнішніх подій і реакції
на них (тобто програма може мати будь-яке число
приймачів, щоб відповісти на будь-які повідомлення, які
вважає важливими).

Наприклад, про зміни в стані мережного підключення або


рівні заряду батареї.

Приймачі широкомовних намірів не мають


користувацького інтерфейсу, однак можуть запускати
Діяльність у відповідь на отримане повідомлення або
показати повідомлення для інформування користувача.
34
Структура програми під платформу Android

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

Однак, система Android може. Тому, щоб використовувати


компонент іншої програми, необхідно повідомити систему,
що є Намір (Intent) запустити компонент якоїсь програми, і
система запустить цей компонент.

35
Структура програми під платформу Android

Компоненти - Діяльність , Служба та Приймач


широкомовних намірів - активуються через асинхронні
повідомлення – Наміри

Наміри пов'язують різні компоненти один з одним у


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

Компонент - Контент-провайдер активується не Наміром,


а запитом від класу ContentResolver

36
Структура програми під платформу Android
Існують:
- Явні наміри;

- Неявні наміри.

Явні наміри - визначають адресата по імені, мають набір


значень і використовуються в основному для повідомлень
всередині однієї програми.

Неявні наміри - не визначають адресата і використовуються


переважно для активації компонентів в іншому додатку.

При відсутності адреси система Android переглядає


Фільтри-Намірів всіх програм і знаходить той компонент,
фільтр-намірів якого найбільше підходить для його
виконання.
37
Структура програми під платформу Android

Об'єкт Intent (Намір) містить інформацію, що


становить інтерес:
1) для компонента, який отримує намір та дані, які
передаються цьому компоненту;
2) для системи Android – ім'я компонента, який
повинен обробити намір і набір параметрів запуску
цього компонента.

38
Структура програми під платформу Android

Поля об'єкту Intent


 Ім'я компонента, який має обробити намір (комбінація
повного імені класу цільового компонента (наприклад,
"MainActivity") та набору імен пакета у файлі маніфесту
програми, де компонент постійно знаходиться
(наприклад, "com.samples.yourproject")).

Якщо воно встановлено, то намір поставляється


екземпляру визначуваного класу.

Якщо ім'я не встановлено, система використовує іншу


інформацію в об'єкті Intent, щоб визначити
місцезнаходження підходящого адресата.
39
Структура програми під платформу Android
 Дія визначає операцію, яка буде виконана, клас
Intent містить безліч констант дії: MAIN, VIEW, PICK,
EDIT і т.д.; можна визначати власні дії для активізації
Діяльності - тоді до дії додається ім'я пакета
програми як префікс).
Наприклад
com.samples.yourproject.CUSTOM_ACTION;

 Дані – це URI даних і тип MIME для цих даних (різні


Діяльності пов'язані з різними видами специфікацій
даних);

 Категорія містить додаткову інформацію про вид


компонента, який має обробити намір (клас Intent
визначає кілька констант CATEGORY, наприклад, 40
CATEGORY_BROWSABLE);
Структура програми під платформу Android

 Доповнення - це пари «ключ значення» для


додаткової інформації, яка потрібна компоненту,
наприклад, дія ACTION_TIMEZONE_CHANGED має
додаток time-zone, який ідентифікує новий часовий
пояс і т.д.) д.);

 Прапори вказують системі, як запускати Діяльність,


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

41
Структура програми під платформу Android

Якщо Намір запитує виконання будь-якої дії з зазначеним


набором даних, то системі потрібно вміти вибрати програму
(або компонент) для обробки цього запиту.

Для цього застосовуються Фільтри-Намірів, які


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

У Фільтрі-Намірів декларується лише три складові об'єкта


Intent: дія, дані, категорія.

42
Структура програми під платформу Android
Файл маніфесту AndroidManifest.xml
Призначення: надає системі основну інформацію про
програму:
- визначає ім'я пакета програми (унікальний ідентифікатор
для програми);
- описує компоненти програми Activities, Services, Broadcast
Receivers та Content Providers (визначає імена класів, що
реалізують кожен із компонентів та оголошує можливості);
- містить список необхідних дозволів для звернення до
захищених частин API та взаємодії з іншими програмами;
- оголошує дозволи, які сторонні додатки повинні мати для
взаємодії з компонентами цієї програми;
- оголошує мінімальний рівень API Android, необхідний для
роботи додатку; 43

- перераховує зв'язані бібліотеки.


Структура програми під платформу Android

Наприклад,

<?xml version="1.0" encoding="utf-8"?>


<manifest ... >
<application android:icon="@drawable/app_icon.png" ... >
<activity android:name="com.example.project.ExampleActivity"
android:label="@string/example_label" ... >
</activity>
...
</application>
</manifest>

44
Структура програми під платформу Android

Для визначення компонентів використовуються:


<activity> для Activity (діяльності)
<service> для Service (служби)
<receiver> для Broadcast Reciever (приймача
широкомовних повідомлень)
<provider> для Content Providers (постачальники даних)

Якщо компоненти не заявлені в маніфесті, то вони не


помітні системі і, отже, ніколи не можуть бути запущені.

Крім того, Broadcast Reciever може створюватися


динамічно в коді та реєструватися за допомогою виклику
registerReceiver()
45
Структура програми під платформу Android

РЕСУРСИ
Використання ресурсів дає можливість змінювати
деякі частини програми без модифікації вихідного
коду, а також дозволяє оптимізувати програму для
різних пристроїв (з різною мовою інтерфейсу або
розміром екрану)

Типи ресурсів:
- Зображення;
- Шари GUI (XML файли);
- Оголошення меню (XML файли);
- Текстові рядки.
46
Структура програми під платформу Android

Для кожного ресурсу, включеного в додаток Android,


визначається унікальний ідентифікатор (ціле число) у
файлі R.java, яке можна використовувати для посилання
на ресурс з коду або інших ресурсів визначених в XML.

Цей клас R генерується на основі заданих ресурсів і


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

47
Структура програми під платформу Android

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

Типи віджетів:
- кнопки,

- текстові поля,

- прапорці,

- перемикачі,

- списки.

48
Кінець лекції

 Запитання?

49

You might also like