0% found this document useful (0 votes)
158 views

Lesson 8 - App Architecture (UI Layer)

This document discusses app architecture and the UI layer in Android development. It covers the ViewModel component which prepares data for the UI and survives configuration changes. LiveData is discussed as a lifecycle-aware data holder that can be observed. Data binding and transformations of LiveData values are also summarized. The document emphasizes separation of concerns and following good architecture practices.

Uploaded by

Ingeniero Aarm
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
158 views

Lesson 8 - App Architecture (UI Layer)

This document discusses app architecture and the UI layer in Android development. It covers the ViewModel component which prepares data for the UI and survives configuration changes. LiveData is discussed as a lifecycle-aware data holder that can be observed. Data binding and transformations of LiveData values are also summarized. The document emphasizes separation of concerns and following good architecture practices.

Uploaded by

Ingeniero Aarm
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 42

Lesson 8:

App architecture
(UI layer)

Android Development with Kotlin v1.0 This work is licensed under the Apache 2 license. 1
About this lesson
Lesson 8: App architecture (UI layer)
● Android app architecture
● ViewModel
● Data binding
● LiveData
● Transform LiveData
● Summary

Android Development with Kotlin This work is licensed under the Apache 2 license. 2
Android app architecture

Android Development with Kotlin This work is licensed under the Apache 2 license. 3
Avoid short-term hacks

● External factors, such as tight deadlines, can lead to poor


decisions about app design and structure.
● Decisions have consequences for future work (app can be
harder to maintain long-term).
● Need to balance on-time delivery and future maintenance
burden.

Android Development with Kotlin This work is licensed under the Apache 2 license. 4
Examples of short-term hacks

● Tailoring your app to a specific device


● Blindly copying and pasting code into your files
● Placing all business logic in activity file
● Hardcoding user-facing strings in your code

Android Development with Kotlin This work is licensed under the Apache 2 license. 5
Why you need good app architecture

● Clearly defines where specific business logic belongs


● Makes it easier for developers to collaborate
● Makes your code easier to test
● Lets you benefit from already-solved problems
● Saves time and reduces technical debt as you extend your app

Android Development with Kotlin This work is licensed under the Apache 2 license. 6
Android Jetpack

● Android libraries that incorporate best practices and provide


backward compatibility in your apps
● Jetpack comprises the androidx.* package libraries

Android Development with Kotlin This work is licensed under the Apache 2 license. 7
Separation of concerns

res/layout

UI Controller
(Activity/Fragment) ViewModel

LiveData
Data Layer

Android Development with Kotlin This work is licensed under the Apache 2 license. 8
Architecture components

● Architecture design patterns, like MVVM and MVI, describe a


loose template for what the structure of your app should be.
● Jetpack architecture components help you design robust,
testable, and maintainable apps.

Android Development with Kotlin This work is licensed under the Apache 2 license. 9
ViewModel

Android Development with Kotlin This work is licensed under the Apache 2 license. 10
Gradle: lifecycle extensions

In app/build.gradle file:

Android Development with Kotlin This work is licensed under the Apache 2 license. 11
ViewModel

● Prepares data for the UI


● Must not reference activity, fragment, or views in view hierarchy
● Scoped to a lifecycle (which activity and fragment have)
● Enables data to survive configuration changes
● Survives as long as the scope is alive

Android Development with Kotlin This work is licensed under the Apache 2 license. 12
Lifetime of a ViewModel

Android Development with Kotlin This work is licensed under the Apache 2 license. 13
Kabaddi Kounter

Android Development with Kotlin This work is licensed under the Apache 2 license. 14
ViewModel class
abstract class ViewModel

Android Development with Kotlin This work is licensed under the Apache 2 license. 15
Implement a ViewModel

Android Development with Kotlin This work is licensed under the Apache 2 license. 16
Load and use a ViewModel

Android Development with Kotlin This work is licensed under the Apache 2 license. 17
Using a ViewModel

Within MainActivity onCreate():

Android Development with Kotlin This work is licensed under the Apache 2 license. 18
Data binding

Android Development with Kotlin This work is licensed under the Apache 2 license. 19
ViewModels and data binding
● App architecture without data binding
UI Controller
Views
ViewModel (activity/fragment with
(defined in XML layout)
click listeners)

● ViewModels can work in concert with data binding

Views
ViewModel (defined in XML layout)

Android Development with Kotlin This work is licensed under the Apache 2 license. 20
Data binding in XML revisited

Specify ViewModels in the data tag of a binding.

Android Development with Kotlin This work is licensed under the Apache 2 license. 21
Attaching a ViewModel to a data binding

Android Development with Kotlin This work is licensed under the Apache 2 license. 22
Using a ViewModel from a data binding

In activity_main.xml:

Android Development with Kotlin This work is licensed under the Apache 2 license. 23
ViewModels and data binding

Android Development with Kotlin This work is licensed under the Apache 2 license. 24
LiveData

Android Development with Kotlin This work is licensed under the Apache 2 license. 25
Observer design pattern

● Subject maintains list of observers to notify when state changes.


● Observers receive state changes from subject and execute
appropriate code.
● Observers can be added or removed at any time.

Android Development with Kotlin This work is licensed under the Apache 2 license. 26
Observer design pattern diagram

Observable

notify observe() notify observe()

Observer Observer

Android Development with Kotlin This work is licensed under the Apache 2 license. 27
LiveData
● A lifecycle-aware data holder that can be observed
● Wrapper that can be used with any data including lists
(for example, LiveData<Int> holds an Int)
● Often used by ViewModels to hold individual data fields
● Observers (activity or fragment) can be added or removed
○ observe(owner: LifecycleOwner, observer: Observer)
removeObserver(observer: Observer)

Android Development with Kotlin This work is licensed under the Apache 2 license. 28
LiveData versus MutableLiveData

LiveData<T> MutableLiveData<T>

● getValue() ● getValue()
● postValue(value: T)
● setValue(value: T)

T is the type of data that’s stored in LiveData or MutableLiveData.

Android Development with Kotlin This work is licensed under the Apache 2 license. 29
Use LiveData in ViewModel

Android Development with Kotlin This work is licensed under the Apache 2 license. 30
Add an observer on LiveData
Set up click listener to increment ViewModel score:

Create observer to update team A score on screen:

Add the observer onto scoreA LiveData in ViewModel:

Android Development with Kotlin This work is licensed under the Apache 2 license. 31
Two-way data binding

● We already have two-way binding with ViewModel and


LiveData.
● Binding to LiveData in XML eliminates need for an observer in
code.

Android Development with Kotlin This work is licensed under the Apache 2 license. 32
Example layout XML

Android Development with Kotlin This work is licensed under the Apache 2 license. 33
Example Activity

Android Development with Kotlin This work is licensed under the Apache 2 license. 34
Example ViewModel

Android Development with Kotlin This work is licensed under the Apache 2 license. 35
Transform LiveData

Android Development with Kotlin This work is licensed under the Apache 2 license. 36
Manipulating LiveData with transformations

LiveData can be transformed into a new LiveData object.


● map()
● switchMap()

Android Development with Kotlin This work is licensed under the Apache 2 license. 37
Example LiveData with transformations

Android Development with Kotlin This work is licensed under the Apache 2 license. 38
Summary

Android Development with Kotlin This work is licensed under the Apache 2 license. 39
Summary
In Lesson 8, you learned how to:
● Follow good app architecture design, and the separation-of-concerns
principle to make apps more maintainable and reduce technical debt
● Create a ViewModel to hold data separately from a UI controller
● Use ViewModel with data binding to make a responsive UI with less
code
● Use observers to automatically get updates from LiveData

Android Development with Kotlin This work is licensed under the Apache 2 license. 40
Learn More

● Guide to app architecture


● Android Jetpack
● ViewModel Overview
● Android architecture sample app
● ViewModelProvider
● Lifecycle Aware Data Loading with Architecture Components
● ViewModels and LiveData: Patterns + AntiPatterns

Android Development with Kotlin This work is licensed under the Apache 2 license. 41
Pathway

Practice what you’ve learned by


completing the pathway:
Lesson 8: App architecture (UI layer)

Android Development with Kotlin This work is licensed under the Apache 2 license. 42

You might also like