Как устроен LocalContext.current под капотом

«Как устроен LocalContext.current под капотом» — вопрос из категории Jetpack Compose, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

LocalContext.current — это CompositionLocal, предоставляющий доступ к текущему контексту в Compose.

Как работает:

  1. Хранится в CompositionLocalProvider, который оборачивает дерево композиции.
  2. При чтении current ищет ближайший предоставленный контекст вверх по дереву.
  3. По умолчанию Android добавляет контекст Activity в корне Compose через AndroidViewBinding.

Нюансы:

  • Если контекст не предоставлен — будет исключение.
  • В тестах нужно мокать через CompositionLocalProvider(LocalContext provides testContext).

Пример:

@Composable
fun MyComponent() {
    val context = LocalContext.current
    Button(onClick = { 
        Toast.makeText(context, "Clicked", Toast.LENGTH_SHORT).show() 
    }) {
        Text("Show Toast")
    }
}