ь обмежені, достовірно можна сказати лише те, що в пам'яті існують лише ті об'єкти, які так чи інакше відносяться до отображаемому на екрані вмісту. Як тільки активують ховається з екрану, наприклад, якщо користувач згортає додаток кнопкою «Додому», активують переходить у стан «зупинено» (stopped). Починаючи з цього моменту, ОС може знищити всі об'єкти в оперативній пам'яті, що стосуються даної активують, включаючи саму активують. Виходячи з цього дуже важливо вчасно зберігати стан програми. Другою особливістю активують є те, що кожного разу при зміні орієнтації пристрою з ландшафтної на портретну або навпаки, активують знищується і створюється заново. Складно сказати, чим продиктоване подібне рішення, швидше за все це зроблено для того, щоб забезпечити підтримку різних варіантів користувальницького інтерфейсу для різної орієнтації пристрою. Дана особливість породжує другу важливу проблему - проблему збереження стану при зміні конфігурації (наприклад, при повороті екрану). Детальніше про роботу з активують можна прочитати в спеціалізованому розділі документації [4].
Сервіс - це компонент, який працює у фоні і використовується для тривалих і ресурсоємних операцій. Відмінною особливістю сервісу є можливість запуску в привілейованому режимі (foreground mode), завдяки якому ОС не завершує додаток в тлі максимально довгий час. Незважаючи на таку можливість, розробникам вкрай не рекомендується зловживати нею і навпаки, завершувати сервіси якомога раніше. Привілейований режим зазвичай використовується для запису або відтворення потокового вмісту, а також для скачування або завантаження файлів. Крім згадуваних раніше джерел, хорошим керівництвом по роботі з сервісами є [6].
Ще одним часто використовуваним компонентом є Broadcast Receiver (в російськомовній літературі зустрічається переклад «широкомовний приймач»). Broadcast receiver - це компонент, службовець для обробки широкомовних повідомлень. ОС Android використовує спеціальні об'єкти для сполучення між компонентами - ІНТЕНТ (intent). Іноді в літературі зустрічається прямий переклад - «наміри». Интент - це об'єкт класу Intent представляє собою деяке повідомлення. З кожним ІНТЕНТ може асоціюватися якийсь код помилки, дія, URI (Uniform Resource Identifier), а також довільний набір пересилаються об'єктів. Об'єкти, так звані extras, зберігаються в асоціативному контейнері з унікальними рядковими ключами. Підтримуються всі примітивні типи, рядки, а також об'єкти, що реалізують інтерфейси Serializable або Parcelable. ІНТЕНТ можуть бути вузьконаправленими, наприклад, для запуску сервісу або активують, або ж широкомовними, що звичайно використовуються як нотифікації про будь-яку подію. ІНТЕНТ широко використовуються в ОС Android: завдяки широкомовним ІНТЕНТ, за допомогою широкомовних приймачів можна підписуватися на різні системні події, від спрацювання будильника і до переходу за посиланням у браузері.
Малюнок 1.1 - Життєвий цикл Activity
Останнім нерозглянутим компонентом є постачальник контенту - content provider. Це, мабуть, найменш часто використовуваний компонент, службовець для надання доступу до деякого сховища даних. Існують системні постачальники контенту для доступу до телефонних контактів, отримання інформації про встановлені додатках і багато чого іншого. Доступ здійснюється за допомогою URI за аналогією з доступом до веб-сторінок. Низька популярність даного компонента пов'язана з його специфічністю: далеко не кожен додаток має необхідність у наданні доступу до своїх даних.
Широкомовні приймачі і постачальники контенту добре описані в багатьох джерелах, наприклад, на популярному російськомовному ресурсі, присвяченому вивченню програмування для ОС Android - [7].
Сполучною елементом, що об'єднує розрізнені компоненти в єдине Android-додаток, є маніфест. Маніфест - це спеціальний обов'язковий XML-файл, що містить перелік усіх компонентів додатки, мінімальну і використовувану для збірки версії ОС, а також необхідні для роботи дозвіл і необхідні можливості пристрою (наприклад, наявність фронтальної камери або певної версії OpenGL ES).
Крім вивчення роботи з основними компонентами, кожний розробник повинен ознайомиться з основними шаблонами проектування ОС Android. Найбільш часто використовуваними стандартними шаблонами проектування є спостерігач (observer) і слухач (listener). Також широко використовуються такі принципи як обмін повідомлень і пізніше зв'язування. Крім цього, Android диктує свої правила при реалізації деяких стандартних процесів, тим самим змушуючи розробникам слідувати певним специфічним шаблонами проектування. Яскравим прикладів цього можуть служити завантажувачі (loaders). Завантажники є нащадками класу Loader і служать для асинхронної завантаження даних. Головною перевагою завантажувачів є те, що їхній життєвий цикл ...