<!-- mobian-agent-page publisher="dailydev" canonical="https://daily.dev/posts/android-architecture-is-moving-from-event-driven-ui-to-state-driven-ui-dbg3ivujp" -->

---
title: Android Architecture Is Moving from Event-Driven UI to...
description: Google updated its official Android UI architecture guidance to recommend converting ViewModel events into UI state rather than using one-shot event mechanisms...
canonical: https://daily.dev/posts/android-architecture-is-moving-from-event-driven-ui-to-state-driven-ui-dbg3ivujp
twitter:card: summary_large_image
twitter:site: @dailydotdev
og:type: website
og:site_name: daily.dev
og:title: Android Architecture Is Moving from Event-Driven UI to State-Driven UI | daily.dev
og:description: Google updated its official Android UI architecture guidance to recommend converting ViewModel events into UI state rather than using one-shot event mechanisms...
og:url: https://daily.dev/posts/android-architecture-is-moving-from-event-driven-ui-to-state-driven-ui-dbg3ivujp
og:image: https://api.daily.dev/og/posts/DbG3ivUjP.png
og:image:alt: Android Architecture Is Moving from Event-Driven UI to State-Driven UI
og:image:width: 1200
og:image:height: 630
og:locale: 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

### Does Google recommend using Channel or SharedFlow for ViewModel events in Android apps?

Official Android Developers guidance, updated May 18, 2026, states that ViewModel events should always result in a UI state update instead of relying on one-shot Event or Effect mechanisms such as Channel or SharedFlow. Channel and SharedFlow are not forbidden, but developers are asked to reconsider whether an event can instead be represented as UI state, summarized by Google as "State is. Events happen."

_Developers redesigning ViewModel communication patterns can track Android architecture guidance shifts on daily.dev._

### How do I show a one-time snackbar message using UI state instead of a Channel-based event in a ViewModel?

Add a nullable field like userMessage to the UI state data class, set it in the ViewModel after the action completes, then observe it in a LaunchedEffect keyed on that field to show the snackbar and call back into the ViewModel to clear the message once shown. This replaces the traditional Channel-based ShowSnackbar event with a state field the UI observes and resets.

_Teams migrating snackbar and one-shot event handling to state can compare Compose patterns via 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 · 12 upvotes · 0 comments
- [15 Years of Android App Architectures](https://daily.dev/posts/15-years-of-android-app-architectures-1xg7is4ou) · droidcon · 0 upvotes · 0 comments
- [The Evolution of Android Architecture: From MVC to MVP, MVVM, and MVI](https://daily.dev/posts/the-evolution-of-android-architecture-from-mvc-to-mvp-mvvm-and-mvi-dy8ubydhc) · Medium · 1 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
- [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

---

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)

```json
{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://daily.dev/#organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180},"sameAs":["https://twitter.com/dailydotdev","https://github.com/dailydotdev","https://www.linkedin.com/company/daily-dev-ltd"]},{"@type":"WebSite","@id":"https://daily.dev/#website","url":"https://daily.dev","name":"daily.dev","publisher":{"@id":"https://daily.dev/#organization"},"potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://daily.dev/search?q={search_term_string}"},"query-input":"required name=search_term_string"}}]}
{"@context":"https://schema.org","@type":"TechArticle","headline":"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","mainEntityOfPage":{"@type":"WebPage","@id":"https://daily.dev/posts/android-architecture-is-moving-from-event-driven-ui-to-state-driven-ui-dbg3ivujp"},"datePublished":"2026-08-10T15:43:56.033Z","dateModified":"2026-09-13T18:54:56.909Z","description":"Google updated its official Android UI architecture guidance to recommend converting ViewModel events into UI state rather than using one-shot event mechanisms...","image":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/d468af1fe59fbe457cf55411ac307360?_a=AQAEuop","thumbnailUrl":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/d468af1fe59fbe457cf55411ac307360?_a=AQAEuop","isAccessibleForFree":true,"articleSection":"ProAndroidDev","inLanguage":"en","publisher":{"@type":"Organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180}},"author":{"@type":"Organization","name":"ProAndroidDev","logo":"https://media.daily.dev/image/upload/t_logo,f_auto/v1/logos/656c1eb1f1ef4f91936e86fc16545114","url":"https://daily.dev/sources/pand"},"commentCount":2,"discussionUrl":"https://daily.dev/posts/android-architecture-is-moving-from-event-driven-ui-to-state-driven-ui-dbg3ivujp","interactionStatistic":[{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":15},{"@type":"InteractionCounter","interactionType":{"@type":"CommentAction"},"userInteractionCount":2}],"keywords":"general-programming,android,kotlin,jetpack-compose","timeRequired":"PT3M"}
{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://daily.dev"},{"@type":"ListItem","position":2,"name":"ProAndroidDev","item":"https://daily.dev/sources/pand"},{"@type":"ListItem","position":3,"name":"Android Architecture Is Moving from Event-Driven UI to State-Driven UI"}]}
{"@context":"https://schema.org","@type":"WebPage","@id":"https://daily.dev/posts/android-architecture-is-moving-from-event-driven-ui-to-state-driven-ui-dbg3ivujp","comment":[{"@type":"Comment","text":"event driven to state driven? isn’t same thing different marketing?","datePublished":"2026-08-19T06:42:50.976Z","url":"https://daily.dev/posts/DbG3ivUjP#c-I0hWLxjkT","author":{"@type":"Person","name":"Yohanes","url":"https://daily.dev/ernest437","image":"https://avatars0.githubusercontent.com/u/14943363?v=4"}},{"@type":"Comment","text":"The screen should be restored before persisting that acknowledgement","datePublished":"2026-08-18T05:17:30.622Z","url":"https://daily.dev/posts/DbG3ivUjP#c-VFIejnluh","author":{"@type":"Person","name":"Agustin Barrientos","url":"https://daily.dev/agustinbarrientos","image":"https://media.daily.dev/image/upload/s--5ayxQnqn--/f_auto/v1788281802/avatars/avatar_wQYYVe5Tbj0NJ7C7qPoa8?_a=BAMAMicg0"}}]}
{"@context":"https://schema.org","@type":"FAQPage","@id":"https://daily.dev/posts/android-architecture-is-moving-from-event-driven-ui-to-state-driven-ui-dbg3ivujp#faq","mainEntity":[{"@type":"Question","name":"Does Google recommend using Channel or SharedFlow for ViewModel events in Android apps?","acceptedAnswer":{"@type":"Answer","text":"Official Android Developers guidance, updated May 18, 2026, states that ViewModel events should always result in a UI state update instead of relying on one-shot Event or Effect mechanisms such as Channel or SharedFlow. Channel and SharedFlow are not forbidden, but developers are asked to reconsider whether an event can instead be represented as UI state, summarized by Google as \"State is. Events happen.\" Developers redesigning ViewModel communication patterns can track Android architecture guidance shifts on daily.dev."}},{"@type":"Question","name":"How do I show a one-time snackbar message using UI state instead of a Channel-based event in a ViewModel?","acceptedAnswer":{"@type":"Answer","text":"Add a nullable field like userMessage to the UI state data class, set it in the ViewModel after the action completes, then observe it in a LaunchedEffect keyed on that field to show the snackbar and call back into the ViewModel to clear the message once shown. This replaces the traditional Channel-based ShowSnackbar event with a state field the UI observes and resets. Teams migrating snackbar and one-shot event handling to state can compare Compose patterns via daily.dev."}}]}
```

