Клас activity, android, programming

Клас Activity - мабуть найважливіший клас, з якого будується додаток Android. Цей клас візуальну активність додатки, і визначає дії, які може виробляти користувач. В Java-додатку повинен бути як мінімум один клас, який був розширений (extends) від батьківського класу Activity. Тому важливо знати і вміти застосовувати методи класу Activity. У цій статті наведено переклад документації Google [1].

Клас Activity стався (extends) від класу ContextThemeWrapper. і реалізував (implements) методи ComponentCallbacks2. KeyEvent.Callback. LayoutInflater.Factory2. View.OnCreateContextMenuListener. Window.Callback.

Ієрархія класів, від якої стався клас Activity: java.lang.Object -> android.content.Context -> android.content.ContextWrapper -> android.view.ContextThemeWrapper -> android.app.Activity.

Відомі прямі спадкоємці Activity (Direct Subclasses): AccountAuthenticatorActivity. ActivityGroup. AliasActivity. ExpandableListActivity. FragmentActivity. ListActivity. NativeActivity.

Відомі непрямі спадкоємці Activity (Indirect Subclasses): ActionBarActivity. LauncherActivity. PreferenceActivity. TabActivity.

[Огляд класу Activity]

Activity перекладається як дія. Це якась сутність, яка уособлює всі, що може робити користувач. Майже всі екземпляри і різновиди activitу безпосередньо взаємодіють з користувачем, так що клас Activity відповідає за створення вікна, в якому Ви можете розмістити свій візуальний інтерфейс GUI викликом setContentView (View). У той час як activitу часто представлені користувачеві як вікна, розгорнуті на весь екран, activitу може бути також використана і по-іншому: як плаваюче вікно (з темою, де встановлено властивість windowIsFloating), або activitу може бути вбудована в інше activity (з використанням ActivityGroup). Кожна програма, яка створюється на Java, створює як мінімум один підклас, розширений від класу Activity:

При цьому в підкласі, зробленому від Activity зазвичай буде реалізовано 2 методу:

onCreate (Bundle) тут Ви ініціалізіруете activity. Найголовніше тут викликати setContentView (int), де int ідентифікатор ресурсу, що визначає інтерфейс користувача (GUI), і використовувати виклики findViewById (int) для отримання доступу до віджетів (контролю), з якими потрібно працювати програмно.
onPause (одночасно) відбувся Ви обробляєте ситуацію, коли користувач залишив роботу з цим activity. Найголовніше тут - зафіксувати (запам'ятати) будь-які зміни, зроблені користувачем (зазвичай дані містить в собі ContentProvider).

Щоб можна було використовувати activity разом з Context.startActivity (), всі класи activity classes повинні мати відповідні опису - декларацію в файлі AndroidManifest.xml пакета програми.

У цій статті будуть розглянуті наступні теми:

1. Фрагменти (Fragments).
2. Життєвий цикл activity.
3. Зміни конфігурації.
4. Запуск Activitу і отримання результатів.
5. Збереження певного стану (Persistent State).
6. Дозволи (Permissions).
7. Життєвий цикл процесу.

Клас Activity є важливою частиною програми в будь-який момент життя додатки, і метод запуску примірників activity і їх комбінування є фундаментальною основою моделі програми платформи Android. Щоб детально розглянути перспективу і структуру програми та як при цьому поводяться активності, будь ласка прочитайте керівництва розробника "Application Fundamentals" (основи додатки) і "Tasks and Back Stack" (завдання і зворотний стек). Ви також можете знайти детальне обговорення питань створення активностей в документації по використанню Activity.

Починаючи з версії Android HONEYCOMB реалізації класу Activity можуть використовувати клас Fragment. щоб краще розділити код на модулі, і створити більш складний інтерфейс користувача, який допоможе підстроїти додаток під різні типи екрану - великі і маленькі.

[Життєвий цикл activity (Activity Lifecycle)]

Активності в системі обробляються як стек активностей. Коли запущена нова активність, вона поміщається наверх стека і ставати працює активністю (running activity) - при цьому попередня активність залишаються завжди нижче в стеці, і не переходить в знову верхнє положення поки існує нова активність.

У активність по суті є 4 стану:

• Якщо активність знаходиться на передній частині екрана (нагорі стека), то вона вважається активної або працює (running).
• Якщо активність втратила фокус, але все ще видима (т. Е. Нова повноекранна або напівпрозора активність отримує фокус і розташовується вище Вашої активності), то вважається, що активність знаходиться в стані паузи (paused). Активність в стані паузи повністю жива (підтримує всі стан і інформацію про елемент, і залишається підключеної до менеджера вікон), однак може бути вбита системою в ситуаціях екстремальної нестачі пам'яті.
• Якщо активність повністю затінений інший активністю, то вона зупиняється. Зупинена активність все ще зберігає свій стан і інформацію про елемент, однак вона більше не видно користувачеві і її вікно приховано, і швидше за все така активність буде убита системою, коли пам'ять знадобитися для чогось ще.
• Якщо активність знаходиться на паузі або в стані зупинки, система може викинути її з пам'яті або шляхом запиту завершення програми, або простим прибиванням її процесу. коли активність буде знову відображена для користувача, вона повинна бути повністю запущена заново і відновлена ​​в своєму попередньому стані.

На наступній діаграмі показано, які важливі стану проходить Activity і в якому порядку. Сірі прямокутники показують методи зворотного виклику (callback methods), які Ви можете реалізувати для виконання операцій, коли Activity переходить між станами. Кольорові овали представляють основні стану Activity, в яких вона може перебувати.

Клас activity, android, programming

Є три ключових циклу, які цікаві у відстеженні стану активності:

• entire lifetime (повне час життя) activity відраховується з моменту першого виклику onCreate (Bundle) до останнього одиночного виклику onDestroy (). Активність робить все настройки свого "глобального" стану в тілі onCreate (), і звільняє всі зайняті ресурси в тілі onDestroy (). Наприклад, якщо в тлі запущений потік, який завантажує дані по мережі, то цей потік може бути створений в тілі onCreate () і зупинений в тілі onDestroy ().
• visible lifetime (видиме час) activity відраховується між викликом onStart () до відповідного виклику onStop (). Протягом цього часу користувач може бачити роботу активності на екрані, хоча це може бути не на передньому плані і у взаємодії з користувачем. Між цими двома методами Ви можете утримувати ресурси, які потрібні для відображення активності для користувача. Наприклад, Ви може зареєструвати BroadcastReceiver в тілі onStart () для відстеження змін, які відбуваються в графічному інтерфейсі користувача, і дерегістріровать його в onStop (), коли користувач більше не бачить відображення активності. Методи onStart () і onStop () можуть бути викликані кілька разів, як тільки активність ставати видимою і невидимою для користувача.
• foreground lifetime (час верхнього стану) відбувається між викликом onResume () до відповідного виклику onPause (). Протягом цього часу активність знаходиться на верхньому рівні (поверх всіх інших активностей), і може взаємодіяти з користувачем. Активність може часто переходити між станом продовження роботи в станом паузи - наприклад, коли пристрій переходить в стан сну, коли доставлений результат роботи активності, коду поставлений новий intent is delivered - так що код в цих методах повинен бути досить простим і нересурсоємних.

Повний життєвий цикл активності визначається наступними методами класу Activity. Всі ці хукі можуть бути абоперезадани (override), щоб вони робили потрібну роботу при зміні стану активності. Все активності реалізовуватимуть onCreate (Bundle) для виконання своєї первісної настройки; часто також потрібно реалізувати onPause (), щоб прийняти зміни даних або в іншому случає підготуватися до зупинки взаємодії з користувачем. Ви повинні завжди викликати свій суперклас (клас-батько), коли реалізуєте ці методи.

Зазвичай переміщення життєвого циклу активності виглядають так: