ProAndroidDev

The latest posts from Android Professionals and Google Developer Experts.

Follow publication

Member-only story

The Evolution of Android Architecture Patterns: UI-Centric vs MVC vs MVP vs MVVM vs MVI

Modern Android development stands on the shoulders of many architectural patterns. Each one emerged to address problems of the previous approach, especially around coupling between UI and logic and managing state across lifecycle events. This article traces that evolution step-by-step, illustrating how Android developers moved from “everything in the Activity” to more decoupled, testable patterns.

1. The Early Days: UI-Centric (God Activity)

What It Is

Early Android apps often threw all logic — business logic, UI updates, and state management — into one Activity or Fragment. This was sometimes erroneously labeled “MVC,” but in practice, there was no separate Controller file. Everything lived in the same UI class, leading to “God Activities.”

Example (Counter App)

class MainActivity : AppCompatActivity() {
private var count = 0
private lateinit var countTextView: TextView

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)

countTextView = findViewById(R.id.countTextView)…

Create an account to read the full story.

The author made this story available to Medium members only.
If you’re new to Medium, create a new account to read this story on us.

Or, continue in mobile web

Already have an account? Sign in

Responses (1)

Write a response

I think two-way data binding is the ultimate form of Android MVVM(ViewBinding vs DataBinding), while unidirectional data flow might just be a transitional phase. On the other hand, MVI enforces unidirectional data flow.

--