---
title: "Android Architecture Is Moving from Event-Driven UI to State-Driven UI"
url: https://daily.dev/posts/android-architecture-is-moving-from-event-driven-ui-to-state-driven-ui-dbg3ivujp
source_url: https://proandroiddev.com/android-architecture-is-moving-from-event-driven-ui-to-state-driven-ui-27f64ee09edc
type: article
source: "ProAndroidDev"
published: 2026-08-10T15:43:56.033Z
updated: 2026-08-10T16:04:36.921Z
tags: ["general-programming", "android", "kotlin", "jetpack-compose"]
reading_time: 3
upvotes: 15
comments: 2
language: en
---

> ## Documentation Index
> Fetch the complete documentation index at: https://daily.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Android Architecture Is Moving from Event-Driven UI to State-Driven UI

**[ProAndroidDev](https://daily.dev/sources/pand)** · 3 min read · 15 upvotes · 2 comments

## Summary

Google updated its official Android UI architecture guidance to recommend converting ViewModel events into UI state rather than using one-shot event mechanisms like Channel or SharedFlow. The shift moves from an event-driven model — where the ViewModel tells the UI what to do — to a state-driven model where the ViewModel describes what is currently true and the UI decides how to present it. Concrete Kotlin/Compose code examples illustrate both approaches using a Snackbar scenario, and the post clarifies that events (e.g., button clicks) are not eliminated, only that ViewModel-to-UI communication should prefer state updates.

## Full article

daily.dev links to this article rather than hosting it. Read it at the original source: <https://proandroiddev.com/android-architecture-is-moving-from-event-driven-ui-to-state-driven-ui-27f64ee09edc>

## Questions this post answers

### What does Google's updated Android architecture guidance say about ViewModel events?

Google's updated Android guidance explicitly states that 'ViewModel events should always result in a UI state update.' Rather than sending one-shot events via Channel or SharedFlow to trigger UI actions like showing a Snackbar, the ViewModel should expose state (e.g., a nullable userMessage field) and the UI observes and reacts to that state, then signals back when it has been consumed.

_Android developers navigating this architectural shift track guidance changes like this on daily.dev._

### How do I convert a ViewModel Channel event to UI state in Jetpack Compose for showing a Snackbar?

Instead of sending a ShowSnackbar event via Channel, add a nullable userMessage: String? field to your UiState. In the ViewModel, set userMessage on save and expose a userMessageShown() function that nulls it out. In Compose, use LaunchedEffect(uiState.userMessage) to show the Snackbar and call userMessageShown() afterward, so the state resets cleanly.

_Teams migrating Android codebases from event-driven to state-driven patterns find related examples and discussions on daily.dev._

## Community discussion

Top comments from developers on daily.dev.

**@ernest437** · 0 upvotes

> event driven to state driven? isn't same thing different marketing?

**@agustinbarrientos** · 0 upvotes

> The screen should be restored before persisting that acknowledgement

## Similar posts on daily.dev

- [Android Architecture Is Quietly Moving Beyond ViewModel as a State Holder](https://daily.dev/posts/android-architecture-is-quietly-moving-beyond-viewmodel-as-a-state-holder-0e2pkua20) · ProAndroidDev · 11 upvotes · 0 comments
- [Beyond Hype: The Evolving Android Architecture from Fat View Model to MVI](https://daily.dev/posts/beyond-hype-the-evolving-android-architecture-from-fat-view-model-to-mvi-cnyudxc0p) · ProAndroidDev · 0 upvotes · 0 comments
- [The State of Android Architecture: Google’s UDF vs. the Real-World “MVI-flavored MVVM”](https://daily.dev/posts/the-state-of-android-architecture-google-s-udf-vs-the-real-world-mvi-flavored-mvvm--kwfxicd6w) · ProAndroidDev · 0 upvotes · 0 comments

---

Tags: [#general-programming](https://daily.dev/tags/general-programming), [#android](https://daily.dev/tags/android), [#kotlin](https://daily.dev/tags/kotlin), [#jetpack-compose](https://daily.dev/tags/jetpack-compose)

[View this post on daily.dev](https://daily.dev/posts/android-architecture-is-moving-from-event-driven-ui-to-state-driven-ui-dbg3ivujp)
