Activity — это компонент Android
, который представляет собой один экран с пользовательским интерфейсом.
Каждое приложение состоит из одной или нескольких Activity
, которые взаимодействуют с пользователем.
Жизненный цикл Activity — это набор состояний, через которые проходит Activity
от создания до уничтожения.
Понимание жизненного цикла важно для правильного управления ресурсами и поведением приложения.
-
onCreate(): Вызывается при создании
Activity
. Здесь происходит инициализацияUI
и данных. -
onStart(): Вызывается, когда
Activity
становится видимой для пользователя. -
onResume(): Вызывается, когда
Activity
переходит в активное состояние и готово к взаимодействию с пользователем. -
onPause(): Вызывается, когда
Activity
теряет фокус (например, при открытии другогоActivity
). -
onStop(): Вызывается, когда
Activity
больше не видно пользователю. -
onDestroy(): Вызывается перед уничтожением
Activity
. -
onRestart(): Вызывается, когда
Activity
возвращается из состоянияonStop()
. -
OnCreate() создает представление.
-
OnStart()
Activate
становится видимым -
OnResume()
Activate
становится доступным для ввода пользователем -
Активация OnPause() видна, но недоступна для ввода пользователем (важно для многооконного режима).
-
Активация OnStop() больше не видна
-
OnDestroy()
Activate
уничтожается -
Активация OnRestart() воссоздается, вызывается после уничтожения и перед созданием.
onCreate() -> onStart() -> onResume() -> [Active] -> onPause() -> onStop() -> onDestroy()
- После
onPause()
Activity
может вернуться в состояниеonResume()
. - После
onStop()
Activity
может вернуться в состояниеonRestart()
.
Навигация между Activity — это переход от одного экрана к другому. Это можно сделать с помощью Intent
.
val intent = Intent(this, SecondActivity::class.java)
startActivity(intent)
Из первой Activity:
val intent = Intent(this, SecondActivity::class.java)
intent.putExtra("KEY_NAME", "Сергей")
intent.putExtra("KEY_AGE", 18)
startActivity(intent)
Во второй Activity:
class SecondActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_second)
val name = intent.getStringExtra("KEY_NAME")
val age = intent.getIntExtra("KEY_AGE", 0)
Log.d("SecondActivity", "Name: $name, Age: $age")
}
}
Запуск Activity с ожиданием результата:
val intent = Intent(this, SecondActivity::class.java)
startActivityForResult(intent, REQUEST_CODE)
Обработка результата в первой Activity:
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if (requestCode == REQUEST_CODE && resultCode == RESULT_OK) {
val result = data?.getStringExtra("RESULT_KEY")
Log.d("MainActivity", "Result: $result")
}
}
Возврат результата из второй Activity:
val intent = Intent()
intent.putExtra("RESULT_KEY", "Данные возвращены")
setResult(RESULT_OK, intent)
finish()
ViewBinding — это механизм, который позволяет легко и безопасно обращаться к элементам UI
в коде.
Он генерирует классы для каждого XML
-файла макета, что позволяет избежать использования findViewById
.
-
Безопасность - Исключает ошибки, связанные с неправильными
ID
. -
Удобство - Упрощает доступ к элементам
UI
. -
Производительность - Не использует рефлексию, в отличие от
findViewById
. -
ActivityMainBinding - Класс, сгенерированный
ViewBinding
дляactivity_main.xml
. -
binding.root - Корневой элемент макета.
-
binding.textView, binding.button - Элементы
UI
, к которым можно обращаться напрямую.
buildFeatures {
// Для ViewBinding вместо findViewById
viewBinding = true
}