Перейти к содержимому
шпаргалка.
Esc
навигацияоткрыть⌘Jпредпросмотр
На этой странице

Жизненный цикл компонентов

Все темы Kotlin Developer

Опишите жизненный цикл (ЖЦ) активити и фрагмента. В чем их отличие? Что инициализируется раньше?

Activity и Fragment имеют этапы создания, запуска, возобновления, остановки и уничтожения. Состояние Fragment ограничено состоянием хоста и FragmentManager. У представления Fragment отдельный жизненный цикл: View может быть уничтожена раньше самого Fragment. При обычном создании Activity начинает инициализацию хоста, затем создаются и подключаются фрагменты; точный порядок зависит от восстановления состояния и способа добавления.

🔗 Ссылки для скачивания

  1. Жизненный цикл приложения на Android

Можно ли заставить сервис работать постоянно?

Гарантировать непрерывную работу сервиса нельзя. Foreground service выполняет заметную пользователю работу с уведомлением, но система или пользователь могут его остановить. Действуют ограничения запуска и времени работы для отдельных типов сервисов. Для отложенных устойчивых задач применяют подходящий механизм планирования, например WorkManager.

🔗 Ссылки для скачивания

  1. Жизненный цикл приложения на Android

Объясните жизненный цикл Activity в Android.

Жизненный цикл Activity включает следующие основные методы:

  • onCreate(): Вызывается при создании Activity. Здесь происходит начальная настройка, такая как создание интерфейса.

  • onStart(): Вызывается, когда Activity становится видимой для пользователя.

  • onResume(): Вызывается, когда Activity начинает взаимодействовать с пользователем.

  • onPause(): Вызывается, когда приложение теряет фокус, но еще видно.

  • onStop(): Вызывается, когда Activity больше не видно пользователю.

  • onDestroy(): Вызывается перед уничтожением Activity.

  • onRestart(): Вызывается перед повторным запуском Activity из состояния остановки.

🔗 Ссылки для скачивания

  1. Жизненный цикл приложения на Android

Какой метод вызывается при повороте экрана и как с этим справляться?

По умолчанию изменение конфигурации, например поворот экрана, пересоздаёт Activity. Если соответствующие изменения объявлены в android:configChanges, система вызывает onConfigurationChanged() вместо пересоздания. Одного переопределения метода недостаточно.

Чтобы сохранить данные при повороте экрана:

  1. Сохранение состояния в Bundle:

    override fun onSaveInstanceState(outState: Bundle) {
        super.onSaveInstanceState(outState)
        outState.putString("key", "value")
    }
    
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        if (savedInstanceState != null) {
            val value = savedInstanceState.getString("key")
        }
    }
  2. Использование ViewModel: ViewModel сохраняет данные при изменении конфигурации.

    class MyViewModel : ViewModel() {
        val data: MutableLiveData<String> = MutableLiveData()
    }
    
    class MainActivity : AppCompatActivity() {
        private val viewModel: MyViewModel by viewModels()
    
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_main)
    
            viewModel.data.observe(this, Observer {
                // Обновление UI
            })
        }
    }

🔗 Ссылки для скачивания

  1. Жизненный цикл приложения на Android

Как работать с жизненным циклом Fragment в Android?

Фрагменты имеют собственный жизненный цикл, синхронизированный с жизненным циклом Activity:

  • onAttach(): Фрагмент присоединен к Activity.

  • onCreate(): Создание фрагмента.

  • onCreateView(): Создание представления фрагмента.

  • onActivityCreated(): Метод вызывается, когда Activity и фрагмент созданы.

  • onStart(): Фрагмент становится видимым.

  • onResume(): Фрагмент начинает взаимодействовать с пользователем.

  • onPause(): Фрагмент теряет фокус, но еще виден.

  • onStop(): Фрагмент больше не виден.

  • onDestroyView(): Удаление представления фрагмента.

  • onDestroy(): Удаление фрагмента.

  • onDetach(): Фрагмент отсоединен от Activity.

🔗 Ссылки для скачивания

  1. Жизненный цикл приложения на Android

Как управлять состоянием компонентов при изменении конфигурации устройства?

Для управления состоянием компонентов при изменении конфигурации устройства можно использовать:

  1. ViewModel: ViewModel сохраняет состояние данных при изменении конфигурации.

    class MyViewModel : ViewModel() {
        val data: MutableLiveData<String> = MutableLiveData()
    }
    
    class MainActivity : AppCompatActivity() {
        private val viewModel: MyViewModel by viewModels()
    
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_main)
    
            viewModel.data.observe(this, Observer {
                // Обновление UI
            })
        }
    }
  2. onSaveInstanceState() и onRestoreInstanceState(): Сохранение и восстановление состояния через Bundle.

    override fun onSaveInstanceState(outState: Bundle) {
        super.onSaveInstanceState(outState)
        outState.putString("key", "value")
    }
    
    override fun onRestoreInstanceState(savedInstanceState: Bundle) {
        super.onRestoreInstanceState(savedInstanceState)
        val value = savedInstanceState.getString("key")
    }
  3. Устаревший способ: retainInstance у Fragment. Для сохранения данных используйте ViewModel, а для восстановления после завершения процесса также SavedStateHandle или сохранённое состояние. Пример ниже приведён только для понимания старого кода.

    class MyFragment : Fragment() {
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            retainInstance = true
        }
    }

🔗 Ссылки для скачивания

  1. Жизненный цикл приложения на Android

Эта страница была полезной?