Activity
– это один из ключевых компонентов Android-приложений, который представляет собой один экран пользовательского интерфейса. Каждая активность отвечает за отображение интерфейса и обработку взаимодействия пользователя с приложением. В Android-приложении может быть одна или несколько активностей, каждая из которых обычно отображает одно окно с элементами управления.
Основные аспекты Activity
1. Жизненный цикл Activity
Жизненный цикл активности описывает изменения её состояния в зависимости от взаимодействий пользователя или операционной системы. Жизненный цикл управляется системой Android, которая вызывает методы для перехода активности из одного состояния в другое. Основные методы жизненного цикла:
onCreate()
: вызывается при создании активности. Обычно здесь происходит инициализация интерфейса, получение данных и настройка логики.onStart()
: вызывается, когда активность становится видимой для пользователя.onResume()
: вызывается, когда активность начинает взаимодействовать с пользователем.onPause()
: вызывается, когда активность частично закрыта (например, открытие диалога поверх активности).onStop()
: вызывается, когда активность больше не видна пользователю.onDestroy()
: вызывается перед окончательным уничтожением активности.
Каждый из этих методов предоставляет возможность управлять состоянием приложения, например, сохранять данные при сворачивании активности или восстанавливать их при возвращении на экран.
2. Intent и запуск Activity
Для того чтобы перейти от одной активности к другой, в Android используется механизм Intent
. Это асинхронное сообщение, которое описывает действие, которое должно быть выполнено, и данные, необходимые для выполнения этого действия. Существует два основных типа Intent:
- Явные Intent: используются для запуска конкретной активности внутри приложения.
- Неявные Intent: используются для запуска действий, которые могут выполняться любыми приложениями, поддерживающими указанный тип действия (например, открытие веб-ссылки в браузере).
Пример запуска активности с явным Intent:
val intent = Intent(this, SecondActivity::class.java)
startActivity(intent)
3. Взаимодействие между Activity
Активности могут обмениваться данными. Для передачи данных между активностями используется объект Bundle
, который прикрепляется к Intent. Пример:
val intent = Intent(this, SecondActivity::class.java)
intent.putExtra("EXTRA_MESSAGE", "Hello, Second Activity!")
startActivity(intent)
Во второй активности данные можно получить следующим образом:
val message = intent.getStringExtra("EXTRA_MESSAGE")
4. Обратные вызовы Activity (startActivityForResult)
Часто возникает необходимость получить данные от другой активности. Для этого используется метод startActivityForResult()
, который позволяет запустить активность с ожиданием результата. Например, если нужно получить изображение с камеры или выбрать файл из системы:
val intent = Intent(this, SecondActivity::class.java)
startActivityForResult(intent, REQUEST_CODE)
После завершения активности вызывается метод onActivityResult()
, в котором можно обработать полученные данные:
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
if (requestCode == REQUEST_CODE && resultCode == Activity.RESULT_OK) {
val result = data?.getStringExtra("RESULT")
}
}
5. Обработка конфигурационных изменений
Когда происходят изменения конфигурации (например, смена ориентации экрана), активность может быть пересоздана системой. Чтобы сохранить данные при таких изменениях, используется метод onSaveInstanceState()
, который позволяет сохранить состояние активности. Например:
override fun onSaveInstanceState(outState: Bundle) {
super.onSaveInstanceState(outState)
outState.putString("STATE_KEY", "Some data")
}
override fun onRestoreInstanceState(savedInstanceState: Bundle) {
super.onRestoreInstanceState(savedInstanceState)
val savedData = savedInstanceState.getString("STATE_KEY")
}
6. Навигация и Back Stack
Android использует концепцию Back Stack для управления переходами между активностями. Каждая активность, запущенная пользователем, добавляется в стек, и пользователь может вернуться к предыдущей активности с помощью кнопки "Назад". Важно понимать, как управлять стеком для правильной организации навигации, особенно в сложных приложениях.
Для управления стеком можно использовать флаги, такие как FLAG_ACTIVITY_CLEAR_TOP
, которые определяют, как именно активность должна быть добавлена в стек или удалена из него.
7. Фрагменты в Activity
Хотя Activity является самостоятельной единицей, для более гибкого управления интерфейсом можно использовать фрагменты. Фрагмент – это подмножество активности, которое имеет собственный жизненный цикл и может быть добавлено или удалено динамически.
Использование фрагментов позволяет разделять интерфейс на более мелкие компоненты и переиспользовать их, что особенно полезно на устройствах с большим экраном или при создании многоэкранных интерфейсов.
8. Манифест и Activity
Каждая активность должна быть объявлена в манифесте Android-приложения (файл AndroidManifest.xml
). В этом файле указываются важные параметры, такие как:
- name: класс активности.
- launchMode: определяет режим запуска активности (например,
singleTop
,singleTask
). - intent-filter: задает действия и типы данных, которые активность может обрабатывать.
Пример декларации активности:
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
9. Ресурсы и темы
Активности можно назначить отдельные темы и стили, чтобы они визуально отличались друг от друга. Например, можно задать тему с определёнными цветами, шрифтами и анимациями в файле styles.xml
, а затем применить её к активности в манифесте:
<activity android:name=".MainActivity" android:theme="@style/MyCustomTheme" />
Заключение
Activity
– это фундаментальный компонент Android-приложений, через который происходит взаимодействие с пользователем. Понимание жизненного цикла, правильное управление состоянием и использование механизмов навигации помогут разработчикам создавать эффективные и устойчивые приложения.
Посмотреть подходящие вакансии для Android-разработчика можно тут!