← Назад к вопросам

Что такое жизненный цикл?

1.3 Junior🔥 261 комментариев
#Android компоненты#Жизненный цикл и навигация

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI23 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Жизненный цикл (Lifecycle) в Android

Жизненный цикл — это последовательность состояний, через которые проходит компонент Android приложения (Activity, Fragment, Service) от момента создания до уничтожения. Это одно из ключевых понятий в Android разработке, так как правильное управление жизненным циклом критично для стабильности и производительности приложения.

Жизненный цикл Activity

Activity проходит через следующие основные состояния:

  1. Created — Activity создана (onCreate)
  2. Started — Activity видима пользователю (onStart)
  3. Resumed — Activity активна и получает фокус (onResume)
  4. Paused — Activity потеряла фокус, но видима (onPause)
  5. Stopped — Activity не видима (onStop)
  6. Destroyed — Activity уничтожена (onDestroy)

Callback методы жизненного цикла

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        // Инициализация компонентов, загрузка сохранённого состояния
        Log.d("Lifecycle", "onCreate called")
    }

    override fun onStart() {
        super.onStart()
        // Activity становится видимой
        Log.d("Lifecycle", "onStart called")
    }

    override fun onResume() {
        super.onResume()
        // Activity получает фокус и готова к взаимодействию
        // Здесь можно запустить анимации, камеру, обновления
        Log.d("Lifecycle", "onResume called")
    }

    override fun onPause() {
        super.onPause()
        // Activity теряет фокус (открылась другая Activity)
        // Сохраняйте данные и останавливайте ресурсоёмкие операции
        Log.d("Lifecycle", "onPause called")
    }

    override fun onStop() {
        super.onStop()
        // Activity полностью скрыта
        // Отпускайте ресурсы: камера, слушатели, сенсоры
        Log.d("Lifecycle", "onStop called")
    }

    override fun onDestroy() {
        super.onDestroy()
        // Activity уничтожается перед удалением из памяти
        // Очищайте ссылки, отписывайтесь от событий
        Log.d("Lifecycle", "onDestroy called")
    }
}

Жизненный цикл Fragment

Fragment имеет более сложный цикл жизни, так как зависит от Activity:

class MyFragment : Fragment() {
    override fun onAttach(context: Context) {
        super.onAttach(context)
        // Fragment присоединён к Activity
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        // Инициализация данных Fragment
    }

    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        // Создание UI
        return inflater.inflate(R.layout.fragment_my, container, false)
    }

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        // Инициализация UI элементов
    }

    override fun onStart() {
        super.onStart()
        // Fragment становится видимым
    }

    override fun onResume() {
        super.onResume()
        // Fragment активен и взаимодействует с пользователем
    }

    override fun onPause() {
        super.onPause()
        // Сохраняйте состояние
    }

    override fun onStop() {
        super.onStop()
        // Останавливайте операции
    }

    override fun onDestroyView() {
        super.onDestroyView()
        // Очищайте ссылки на View
    }

    override fun onDestroy() {
        super.onDestroy()
        // Финальная очистка
    }

    override fun onDetach() {
        super.onDetach()
        // Fragment отсоединён от Activity
    }
}

Сценарии и best practices

Запуск тяжёлых операций:

  • Камеру, GPS, слушатели датчиков запускайте в onResume
  • Останавливайте в onPause

Сохранение состояния:

override fun onSaveInstanceState(outState: Bundle) {
    super.onSaveInstanceState(outState)
    outState.putString("key", "value")
}

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    val value = savedInstanceState?.getString("key")
}

Использование ViewModel (современный подход):

class MyViewModel : ViewModel() {
    // Данные сохраняются при пересоздании Activity
    private val _data = MutableLiveData<String>()
    val data: LiveData<String> = _data
}

class MainActivity : AppCompatActivity() {
    private val viewModel: MyViewModel by viewModels()

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        // ViewModel сохранит состояние при повороте экрана
    }
}

Важные моменты

  • Lifecycle Aware Components помогают управлять жизненным циклом автоматически
  • LiveData и Flow реагируют на изменения состояния приложения
  • Правильное управление жизненным циклом предотвращает утечки памяти
  • onDestroy может быть не вызван в критических ситуациях, поэтому полагайтесь на onStop

Понимание жизненного цикла — это основа стабильного и эффективного Android приложения.