> Знаете ли вы полную аббревиатуру state machine (Android)

Уровень: middle · Роль: mobile · Категория: Технические вопросы

Компании: MTS

Стек: Android

> Пример ответа

Короткий ответ

Полная аббревиатура state machine - FSM (Finite State Machine). В контексте Android также встречается SSM (Simple State Machine) как упрощённая реализация, но классический термин - именно FSM. Иногда используют HFSM (Hierarchical Finite State Machine) для вложенных состояний, но это уже расширение, а не базовое понятие.

Подробное объяснение

FSM - это математическая модель, описывающая систему с конечным числом состояний и переходами между ними. Формально она задаётся пятеркой: множество состояний, алфавит входных событий, функция переходов, начальное состояние и множество конечных состояний.

В Android FSM применяется для управления сложными UI-сценариями, жизненным циклом компонентов, обработкой жестов или состояниями сети. Ключевая идея - система всегда находится ровно в одном состоянии, а переходы происходят только по явным событиям, что исключает неконсистентные промежуточные состояния.

На практике

В Android FSM часто реализуют через enum + when, либо через библиотеки типа StateMachine из Android framework (устаревшая) или современные решения на Kotlin (например, KStateMachine). Основной trade-off: enum-подход прост и предсказуем, но при росте числа состояний становится громоздким, а библиотеки добавляют абстракции, но требуют изучения.

Практический пример - управление состоянием экрана входа: idle → loading → success/error. Каждое состояние определяет, какие UI-элементы видны и какие действия доступны. Переходы обрабатываются централизованно, что упрощает тестирование.

Пример кода

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

class LoginStateMachine {
    var currentState: LoginState = LoginState.Idle
        private set

    fun onLoginClicked() {
        currentState = when (currentState) {
            is LoginState.Idle -> LoginState.Loading
            is LoginState.Loading -> currentState // ignore
            is LoginState.Error -> LoginState.Loading
            is LoginState.Success -> currentState
        }
    }

    fun onLoginSuccess() {
        if (currentState is LoginState.Loading) {
            currentState = LoginState.Success
        }
    }

    fun onLoginError(message: String) {
        if (currentState is LoginState.Loading) {
            currentState = LoginState.Error(message)
        }
    }
}

Как отвечать на собеседовании

Начните с точного определения FSM, затем приведите формальное описание (пять компонентов). После этого свяжите с Android: приведите конкретный кейс из практики - например, управление состоянием загрузки или видеоплеером. Покажите, что понимаете ограничения: FSM плохо масштабируется при десятках состояний, поэтому нужны HFSM или стейт-чарты.

Упомяните альтернативы: StateFlow + sealed class как современный подход, или Navigation Component для навигации. Если спросят про тестирование - скажите, что FSM легко тестировать, потому что каждый переход можно проверить изолированно.

Что проверяет интервьюер

Интервьюер оценивает:

  • знание базовой теории (не только аббревиатуру, но и суть модели);
  • способность применить абстракцию к реальной задаче Android;
  • понимание trade-off между простотой и масштабируемостью;
  • умение объяснить, почему FSM - это не про производительность, а про корректность состояний.

Типичные ошибки

  • Путать FSM с StateFlow или State - это разные вещи: FSM - модель, StateFlow - инструмент реактивного программирования.
  • Говорить только про enum, не упоминая переходы и события.
  • Не упоминать ограничения - например, что FSM не подходит для параллельных состояний.
  • Называть аббревиатуру неправильно: например, "SMS" или "FSM" без расшифровки.
  • Забывать, что в Android есть встроенный класс StateMachine, но он deprecated, и современный подход - это sealed class + корутины.

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью