Что такое стейт-машина

«Что такое стейт-машина» — вопрос из категории Архитектура, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Стейт-машина (конечный автомат) — это модель поведения системы, где состояние объекта изменяется в ответ на события. Состоит из:

  • Состояний (States) — возможные положения системы (например, IDLE, LOADING, SUCCESS)
  • Переходов (Transitions) — правила смены состояний при событиях
  • Действий (Actions) — операции при переходе/состоянии

Пример для загрузки данных:

sealed class State {
    object Idle : State()
    object Loading : State()
    data class Success(val data: String) : State()
    data class Error(val message: String) : State()
}

fun handleEvent(event: Event, currentState: State): State {
    return when (currentState) {
        is State.Idle -> when (event) {
            Event.StartLoading -> State.Loading
            else -> currentState
        }
        is State.Loading -> when (event) {
            Event.DataLoaded -> State.Success(event.data)
            Event.Error -> State.Error(event.message)
            else -> currentState
        }
        else -> currentState
    }
}

Используется для:

  • Четкого управления сложными потоками (аутентификация, UI-логика)
  • Предсказуемости — каждое состояние явно определено
  • Упрощения тестирования