MVVM Series: LiveData; the Superhero of Android Data Handling!

Hey there, fellow Android developers! Today, we’re going to talk about a data-handling superhero that will make your app development life a breeze – LiveData! It saves your app from data disasters and keeps your UI components in sync. So, grab your developer capes, and let’s dive into the world of LiveData! Continue reading…

View Post

MVVM Series: LiveData; the Superhero of Android Data Handling!

Hey there, fellow Android developers! Today, we’re going to talk about a data-handling superhero that will make your app development life a breeze – LiveData! It saves your app from data disasters and keeps your UI components in sync. So, grab your developer capes, and let’s dive into the world of LiveData

Tired of multi-source data mess? With LiveData, you can have a single source of truth for all your app’s data. No more juggling data from different sources like a circus performer on a tightrope. Just encapsulate your data in a LiveData object and let it do the heavy lifting. Your UI will always be in sync with the latest data, and you’ll have a clean and consistent data flow in your app. Basically, no need to check the data for changes and update the UI manually, How? let me explain.

One of the issues with updating the UI manually is dealing with the elements’ lifecycle; you don’t want to update elements that are not viewable anymore; do you? LiveData is lifecycle-aware, which means it updates your UI components only when they’re in the active state. Say goodbye to unnecessary UI updates and memory leaks. Just observe and remove observers for LiveData in the right lifecycle methods, and your UI will be updated only when it’s time to shine. It’s like having a trusty sidekick that always has your back!

Here is a simple example of using Live data in Kotlin.

// Creating a LiveData object with some initial data
val myLiveData = MutableLiveData<String>().apply {
    value = "Han Solo!"
}

Somewhere else in your app, you may update the LiveData by:

button.setOnClickListener {
    val anotherName = "Luke Skywalker"
    model.currentName.setValue(anotherName)
    //Or use model.currentName.postValue(anotherName)
}

* A note from Google: You must call the setValue(T) method to update the LiveData object from the main thread. If the code is executed in a worker thread, you can use the postValue(T) method instead to update the LiveData object.

Observing the LiveData object in a Fragment/Activity:

myLiveData.observe(viewLifecycleOwner, { data ->
    // Update UI with the latest data
    textView.text = data
})

LiveData provides two types of objects – MutableLiveData and LiveData. MutableLiveData is a subclass of LiveData that allows you to modify the data held by the LiveData object. Use MutableLiveData in your view models to update the data and trigger UI updates. However, expose the LiveData object to your UI components to ensure that the data is read-only and maintain a unidirectional data flow.

* Note: Make sure to store LiveData objects that update the UI in ViewModel objects, as opposed to an activity or fragment, for the following reasons:
– To avoid bloated activities and fragments. Now these UI controllers are responsible for displaying data but not holding data state.
– To decouple LiveData instances from specific activity or fragment instances and allow LiveData objects to survive configuration changes. Says Google.

In most cases, the right place to begin observing a LiveData object is onCreate() method of the Fragment/Activity to ensure we don’t have any redundant calls and to update the components at the right time.

For more information and samples on this, you can check the link below:

https://developer.android.com/topic/libraries/architecture/livedata

  • This article was part of the Android MVVM series…