SlideShare a Scribd company logo
#UAMOBILE
ViewMODEL & MVVM
& databinding
architecture components in ACTION
@PreusslerBerlin
MVVM with Databinding and Google's new ViewModel. UA Mobile 2017.
Introducing
The
architecture
components
starring
Room
LiFe cycle
LiveData
ViewModel
Pagination (new)
in new suggested architecture
in new suggested architecture
In architecture components
•A	ViewModel provides	the	data	for	a	specific	UI
•The	ViewModel does	not	know	about	the	View!
•Survives	configuration	change
In architecture components
•A	ViewModel provides	the	data	for	a	specific	UI
•The	ViewModel does	not	know	about	the	View!
•Survives	configuration	change
In architecture components
•A	ViewModel provides	the	data	for	a	specific	UI
•The	ViewModel does	not	know	about	the	View!
•Survives	configuration	change
In architecture components
•A	ViewModel provides	the	data	for	a	specific	UI
•The	ViewModel does	not	know	about	the	View!
•Survives	configuration	change
In architecture components
•Remember	configuration	change	can	be:
•Rotation
•Any	other	resize	i.e.	split	screen
•Language	change
life cycle: rotation
onCreate
onStart
onResume
onPause
onStop
onDestroy
onCreate
onStart
onResume
ViewModel
life cycle: finish
onCreate
onStart
onResume
onPause
onStop
onDestroy
ViewModel
How to use
implementation
'android.arch.lifecycle:extensions:1.0.0’
kapt 'android.arch.lifecycle:compiler:1.0.0’
How to use
class MyViewModel()
: ViewModel() {
How to use
class MyViewModel(app: Application)
: AndroidViewModel(app) {
How to use
override fun onCreate(...) {
model = ViewModelProviders
.of(this)
.get(MyViewModel::class.java)
}
What if…
constructor	arguments	needed?
How to use
class MyViewModelFactory
:ViewModelProvider.Factory(useCase: MyUseCase) {
fun <T: ViewModel> create(aClass: Class<T>): T {
return MyViewModel(useCase) as T
}
}
How to use
ViewModelProviders
.of(this, MyViewModelFactory(usecase))
.get(MyShowsViewModel::class.java)
How to use
•Always	try	to	build	your	own	Factory
•Default	factory	uses	newInstance()
which	is	some	hundred	times	slower	
than	new	calls	(reflection)
https://speakerdeck.com/dpreussler/comparing-dependency-injection-
frameworks-and-internals-for-android
How to use
•Always	try	to	build	your	own	Factory
•Default	factory	uses	newInstance()
which	is	some	hundred	times	slower	
than	new	calls	(reflection)
https://speakerdeck.com/dpreussler/comparing-dependency-injection-
frameworks-and-internals-for-android
How to use
override fun onStopped() {
…
}
No	more	life	cycle	forwarding!
What if…
I	need	to	clean	something	when	destroyed?
What if…
class MyViewModel() : ViewModel() {
override fun onCleared() {
super.onCleared()
cleanupSubscriptions()
}
How does
it	survive	
orientation	change?
How does it actually work?
class HolderFragment extends Fragment {
public HolderFragment() {
setRetainInstance(true);
}
…
How does it actually work?
String HOLDER_TAG =
"android.arch.lifecycle.state.StateProviderH
olderFragment";
How does
it	know	
the	activity	
is	finishing?
How does it actually work?
@Override
public void onDestroy() {
super.onDestroy();
mViewModelStore.clear();
}
Can I do it differently?
ViewModel is not life cycle aware?
It just
refuses to
die
remember
Never	hold	View	or	Activity	references
in	the	ViewModel!
Tell us more
What if
Two	Fragments	
of	same	Activity	
ask	for	same	ViewModel.class via
ViewModelProviders
.of(this)
.get(MyViewModel::class.java)
Different	ViewModels
RESULT
What if
Two	Fragments	
of	same	Activity	
ask	for	same	ViewModel.class via
ViewModelProviders
.of(this)
.get(MyViewModel::class.java)
W
A
I
T
result
•Fragment	and	Activity	share	the	same	
FragmentManager
•But	implementation	uses	
Activity’s	FragmentManager but	
ChildFragmentManager for	Fragments
result
•Fragment	and	Activity	share	the	same	
FragmentManager
•But implementation	uses	
Activity’s	FragmentManager but	
ChildFragmentManager for	Fragments
What if
Two	Fragments	
of	same	Activity	
ask	for	same	ViewModel.class via
ViewModelProviders
.of(getActivity())
.get(MyViewMode::class).java
result
Same	ViewModel
Tell us more
Other uses cases
communication	layer	between	
activities	and	fragments	
or	
fragments	and	fragments
Other uses cases
Replace	Loaders
(plus	Room	and	LiveData/Rx)
Tell us more
ViewModel
like	in	
Model-View-ViewModel
?
Model-View-ViewModel
ViewModel in MVVM world
ModelViewModelView
View Presenter Model
ViewModel in MVVM world
ModelViewModelView
View ViewModel Model
Is MVP
dead?
Is MVP dead?
It’s	like	Java	and	Kotlin:
•MVP	will	stay	for	quite	some	time
•There	is	a	new	cooler	kid	in	town	that	won’t	
leave
Is MVP dead?
It’s	like	Java	and	Kotlin:
•MVP	will	stay	for	quite	some	time
•There	is	a	new	cooler	kid	in	town	that	won’t	
leave
Is MVP dead?
It’s	like	Java	and	Kotlin:
•MVP	will	stay	for	quite	some	time
•There	is	a	new	cooler	kid	in	town	that	
won’t	leave
Is MVP dead?
•Start	by	putting	the	ViewModel behind	
Presenter
Binding to ViewMODELS
Activity
Activity
ViewModel
(un)bind
(un)bind
IntroduciNG LIVE DATA
Activity
Activity
LiveData
LiveData
ViewModel
IntroduciNG LIVE DATA
•Observable	similar	to	RxJava
•Life	cycle	aware
•Doesn’t	emit	when	not	needed
•Memory	leaks	save
IntroduciNG LIVE DATA
class MyViewModel(): ViewModel() {
val message =
MutableLiveData<String>()
IntroduciNG LIVE DATA
myModel.message.observe(
this,
Observer { display(it) })
Is there
something
better?
Databinding!
Data binding full picture
XML ViewModelbind
Solves the one big android
question once and forever
who is the view?
ViewModel in data binding
<TextView
…
android:id="@+id/all_shows_item_title"
android:text="@{viewModel.title}" />
<data>
<variable name="viewModel"
type="com.vmn.playplex.main.allshows.AllShowsViewModel"/>
</data>
ViewModel in data binding
<android.support.v7.widget.CardView
…
android:onClick="@{() -> viewModel.onClicked()}">
<data>
<variable name="viewModel"
type="com.vmn.playplex.main.allshows.AllShowsViewModel"/>
</data>
How to use
class AllShowsViewModel: ViewModelObservable() {
var title : CharSequence = ""
How to use
class AllShowsViewModel: ViewModelObservable() {
@Bindable
var title : CharSequence = ""
private set(value) {
if (field != value) {
field = value
notifyPropertyChanged(BR.title)
}
}
How to use
class AllShowsViewModel: ViewModelObservable() {
@Bindable
var title by bindable<CharSequence>("")
private set
Custom	property	delegate
How to use
class AllShowsFragment : Fragment () {
@Inject
lateinit var showsViewModel: AllShowsViewModel
How to use
class AllShowsFragment : Fragment () {
@Inject
lateinit var showsViewModel: AllShowsViewModel
override fun onCreateView(…):View? =
How to use
class AllShowsFragment : Fragment () {
@Inject
lateinit var showsViewModel: AllShowsViewModel
override fun onCreateView(…):View? =
FragmentShowsBinding.inflate(
inflater, container, false).apply {
viewModel = showsViewModel
}).root
How to use
class AllShowsFragment : Fragment () {
@Inject
lateinit var showsViewModel: AllShowsViewModel
override fun onCreateView(…):View? =
FragmentShowsBinding.inflate(
inflater, container, false).apply {
viewModel = showsViewModel
}).root
fragment_shows.xml
How to use
class MyViewModel()
:ViewModelObservable() {
Coming soon
Jose Alcérreca, Google
https://medium.com/@dpreussler/add-the-new-viewmodel-to-your-mvvm-36bfea86b159
How do I…
.. show a toast
class SeriesViewModel : Viewmodel() {
…
@Bindable
var error = ObservableField<String>()
.. show a toast
viewModel.error.addOnPropertyChangedCallback(
object : OnPropertyChangedCallback() {
override fun onPropertyChanged(…) {
showToast(viewModel.error.get()
}
})
.. show a toast (alternative)
<FrameLayout
app:showError="@{viewModel.error}">
@BindingAdapter("showError")
fun ViewGroup.onErrorAppeared(error: String?){
errorString?.let {
showToast(context, error))
}
}
Data binding full picture
XML
Activity ViewModel(un)bind
bind
Life cycle
aware class (un)bind
WAYS TO OBSERVE DATA from VM?
•Data	binding		Observable
from	xml	or	code,	might	need	unregister
•RxJava Observable
from	code,	needs	unregister
•LiveData Observable,
from	code,	no	unregister,	life	cycle	aware
let`s sum up
•Architecture	components	are	
here
•Use	the	parts	you	need
•Goal:	common	architecture	
language
•Databinding	rocks
•Know	about	life	cycle
Want to know more
• https://medium.com/@dpreussler/add-the-new-
viewmodel-to-your-mvvm-36bfea86b159
• https://proandroiddev.com/customizing-the-new-
viewmodel-cf28b8a7c5fc
• http://hannesdorfmann.com/android/arch-components-
purist
• https://blog.stylingandroid.com/architecture-components-
viewmodel/
• https://www.youtube.com/watch?v=QrbhPcbZv0I
• https://www.youtube.com/watch?v=c9-057jC1ZA
Southpark copyright
Disclaimer
viacom.tech
View Model
IN
ACTION
@PreusslerBerlin
Does that mean
all	problems	are	solved?
all problems solved?
ViewModels provide	a	convenient	way	to	
retain	data	across	configuration	changes
but	they	are	not	persisted if	the	application	
is	killed	by	the	operating	system
https://developer.android.com/topic/libraries/architecture/viewmodel.html#viewm
odel_vs_savedinstancestate
but but
WHY?
Why?
The	data	saved	via onSaveInstanceState is	kept	in	
the	system	process	memory	
and	the	Android	OS	allows	you	to	keep	only	a	very	
small	amount	of	data	
so	it	is	not	a	good	place	to	keep	actual	data	for	
your	app.		
TransactionTooLargeException anyone?
MeaNS
ViewModels gives	us	rotation
But	takes	away	recreation
after The truth
•Keep	non-UI	states	in	non-UI	layer	
Not	in	bundle!
•Use	real	caching	strategies
•Allows	updating	cache	in	background
after The truth
•Keep	non-UI	states	in	non-UI	layer	
Not	in	bundle!
•Use	real	caching	strategies
•Allows	updating	cache	in	background
after The truth
•Keep	non-UI	states	in	non-UI	layer	
Not	in	bundle!
•Use	real	caching	strategies
•Allows	updating	cache	in	background
but but
EditText might	have	restored	it’s	state
but	the	ViewModel will	not	now	about	it
but but
Where	to	store	the	UI	state?
store the UI state
In Bundles!
but but
Who	owns	the	UI	state?
store the UI state
The ViewModel
store the UI state
lets tweak it
class MyModelFactory(val bundle: Bundle?)
:ViewModelProvider.Factory() {
…
fun <T: ViewModel> create(aClass: Class<T>): T {
return MyViewModel().apply {
readFrom(bundle)
} as T
}
...
lets tweak it
override onSaveInstanceState(bundle: Bundle){
super.onSaveInstanceState(bundle);
viewModel.writeTo(bundle);
}

More Related Content

What's hot (8)

Data Binding in Action using MVVM pattern
Data Binding in Action using MVVM patternData Binding in Action using MVVM pattern
Data Binding in Action using MVVM pattern
Fabio Collini
 
MVVM & Data Binding Library
MVVM & Data Binding Library MVVM & Data Binding Library
MVVM & Data Binding Library
10Clouds
 
Vaadin Components @ Angular U
Vaadin Components @ Angular UVaadin Components @ Angular U
Vaadin Components @ Angular U
Joonas Lehtinen
 
Angular JS
Angular JSAngular JS
Angular JS
John Temoty Roca
 
Introduction to Angularjs
Introduction to AngularjsIntroduction to Angularjs
Introduction to Angularjs
Manish Shekhawat
 
The AngularJS way
The AngularJS wayThe AngularJS way
The AngularJS way
Boyan Mihaylov
 
Angular js
Angular jsAngular js
Angular js
Manav Prasad
 
Magento 2.0: Prepare yourself for a new way of module development
Magento 2.0: Prepare yourself for a new way of module developmentMagento 2.0: Prepare yourself for a new way of module development
Magento 2.0: Prepare yourself for a new way of module development
Ivan Chepurnyi
 
Data Binding in Action using MVVM pattern
Data Binding in Action using MVVM patternData Binding in Action using MVVM pattern
Data Binding in Action using MVVM pattern
Fabio Collini
 
MVVM & Data Binding Library
MVVM & Data Binding Library MVVM & Data Binding Library
MVVM & Data Binding Library
10Clouds
 
Vaadin Components @ Angular U
Vaadin Components @ Angular UVaadin Components @ Angular U
Vaadin Components @ Angular U
Joonas Lehtinen
 
Magento 2.0: Prepare yourself for a new way of module development
Magento 2.0: Prepare yourself for a new way of module developmentMagento 2.0: Prepare yourself for a new way of module development
Magento 2.0: Prepare yourself for a new way of module development
Ivan Chepurnyi
 

Similar to MVVM with Databinding and Google's new ViewModel. UA Mobile 2017. (20)

MVM - It's all in the (Implementation) Details
MVM - It's all in the (Implementation) DetailsMVM - It's all in the (Implementation) Details
MVM - It's all in the (Implementation) Details
Florina Muntenescu
 
MVM - It's all in the (Implementation) Details
MVM - It's all in the (Implementation) DetailsMVM - It's all in the (Implementation) Details
MVM - It's all in the (Implementation) Details
Florina Muntenescu
 
Dialogs in Android MVVM (14.11.2019)
Dialogs in Android MVVM (14.11.2019)Dialogs in Android MVVM (14.11.2019)
Dialogs in Android MVVM (14.11.2019)
Vladislav Ermolin
 
Working effectively with ViewModels and TDD - UA Mobile 2019
Working effectively with ViewModels and TDD - UA Mobile 2019Working effectively with ViewModels and TDD - UA Mobile 2019
Working effectively with ViewModels and TDD - UA Mobile 2019
UA Mobile
 
Survive the lifecycle
Survive the lifecycleSurvive the lifecycle
Survive the lifecycle
Simon Joecks
 
Android Jetpack: ViewModel and Testing
Android Jetpack: ViewModel and TestingAndroid Jetpack: ViewModel and Testing
Android Jetpack: ViewModel and Testing
Yongjun Kim
 
[22]Efficient and Testable MVVM pattern
[22]Efficient and Testable MVVM pattern[22]Efficient and Testable MVVM pattern
[22]Efficient and Testable MVVM pattern
NAVER Engineering
 
Model viewviewmodel2
Model viewviewmodel2Model viewviewmodel2
Model viewviewmodel2
Suraj Kulkarni
 
Building Modern Apps using Android Architecture Components
Building Modern Apps using Android Architecture ComponentsBuilding Modern Apps using Android Architecture Components
Building Modern Apps using Android Architecture Components
Hassan Abid
 
Effective Android Data Binding
Effective Android Data BindingEffective Android Data Binding
Effective Android Data Binding
Eric Maxwell
 
Who needs MVVM? Architecture components & MVP - Timor Surkis, Colu
Who needs MVVM? Architecture components & MVP - Timor Surkis, ColuWho needs MVVM? Architecture components & MVP - Timor Surkis, Colu
Who needs MVVM? Architecture components & MVP - Timor Surkis, Colu
DroidConTLV
 
MVVM Presentation
MVVM PresentationMVVM Presentation
MVVM Presentation
Javad Arjmandi
 
Presentation Android Architecture Components
Presentation Android Architecture ComponentsPresentation Android Architecture Components
Presentation Android Architecture Components
Attract Group
 
Architecture and RxJava
Architecture and RxJavaArchitecture and RxJava
Architecture and RxJava
Jolanda Verhoef
 
MVVM Presentation.pptx
MVVM Presentation.pptxMVVM Presentation.pptx
MVVM Presentation.pptx
AsfandyarZaidi
 
Arquitetando seu app Android com Jetpack
Arquitetando seu app Android com JetpackArquitetando seu app Android com Jetpack
Arquitetando seu app Android com Jetpack
Nelson Glauber Leal
 
Android DataBinding (ViewModel, UI Modularization and Testing)
Android DataBinding (ViewModel, UI Modularization and Testing)Android DataBinding (ViewModel, UI Modularization and Testing)
Android DataBinding (ViewModel, UI Modularization and Testing)
Yongjun Kim
 
Cleaning your architecture with android architecture components
Cleaning your architecture with android architecture componentsCleaning your architecture with android architecture components
Cleaning your architecture with android architecture components
Debora Gomez Bertoli
 
Data binding
Data bindingData binding
Data binding
Yonatan Levin
 
Android architecture components - how they fit in good old architectural patt...
Android architecture components - how they fit in good old architectural patt...Android architecture components - how they fit in good old architectural patt...
Android architecture components - how they fit in good old architectural patt...
DroidConTLV
 
MVM - It's all in the (Implementation) Details
MVM - It's all in the (Implementation) DetailsMVM - It's all in the (Implementation) Details
MVM - It's all in the (Implementation) Details
Florina Muntenescu
 
MVM - It's all in the (Implementation) Details
MVM - It's all in the (Implementation) DetailsMVM - It's all in the (Implementation) Details
MVM - It's all in the (Implementation) Details
Florina Muntenescu
 
Dialogs in Android MVVM (14.11.2019)
Dialogs in Android MVVM (14.11.2019)Dialogs in Android MVVM (14.11.2019)
Dialogs in Android MVVM (14.11.2019)
Vladislav Ermolin
 
Working effectively with ViewModels and TDD - UA Mobile 2019
Working effectively with ViewModels and TDD - UA Mobile 2019Working effectively with ViewModels and TDD - UA Mobile 2019
Working effectively with ViewModels and TDD - UA Mobile 2019
UA Mobile
 
Survive the lifecycle
Survive the lifecycleSurvive the lifecycle
Survive the lifecycle
Simon Joecks
 
Android Jetpack: ViewModel and Testing
Android Jetpack: ViewModel and TestingAndroid Jetpack: ViewModel and Testing
Android Jetpack: ViewModel and Testing
Yongjun Kim
 
[22]Efficient and Testable MVVM pattern
[22]Efficient and Testable MVVM pattern[22]Efficient and Testable MVVM pattern
[22]Efficient and Testable MVVM pattern
NAVER Engineering
 
Building Modern Apps using Android Architecture Components
Building Modern Apps using Android Architecture ComponentsBuilding Modern Apps using Android Architecture Components
Building Modern Apps using Android Architecture Components
Hassan Abid
 
Effective Android Data Binding
Effective Android Data BindingEffective Android Data Binding
Effective Android Data Binding
Eric Maxwell
 
Who needs MVVM? Architecture components & MVP - Timor Surkis, Colu
Who needs MVVM? Architecture components & MVP - Timor Surkis, ColuWho needs MVVM? Architecture components & MVP - Timor Surkis, Colu
Who needs MVVM? Architecture components & MVP - Timor Surkis, Colu
DroidConTLV
 
Presentation Android Architecture Components
Presentation Android Architecture ComponentsPresentation Android Architecture Components
Presentation Android Architecture Components
Attract Group
 
MVVM Presentation.pptx
MVVM Presentation.pptxMVVM Presentation.pptx
MVVM Presentation.pptx
AsfandyarZaidi
 
Arquitetando seu app Android com Jetpack
Arquitetando seu app Android com JetpackArquitetando seu app Android com Jetpack
Arquitetando seu app Android com Jetpack
Nelson Glauber Leal
 
Android DataBinding (ViewModel, UI Modularization and Testing)
Android DataBinding (ViewModel, UI Modularization and Testing)Android DataBinding (ViewModel, UI Modularization and Testing)
Android DataBinding (ViewModel, UI Modularization and Testing)
Yongjun Kim
 
Cleaning your architecture with android architecture components
Cleaning your architecture with android architecture componentsCleaning your architecture with android architecture components
Cleaning your architecture with android architecture components
Debora Gomez Bertoli
 
Android architecture components - how they fit in good old architectural patt...
Android architecture components - how they fit in good old architectural patt...Android architecture components - how they fit in good old architectural patt...
Android architecture components - how they fit in good old architectural patt...
DroidConTLV
 
Ad

More from UA Mobile (20)

Designing iOS+Android project without using multiplatform frameworks - UA Mob...
Designing iOS+Android project without using multiplatform frameworks - UA Mob...Designing iOS+Android project without using multiplatform frameworks - UA Mob...
Designing iOS+Android project without using multiplatform frameworks - UA Mob...
UA Mobile
 
Декларативное программирование клиент-серверных приложений на андроид - UA Mo...
Декларативное программирование клиент-серверных приложений на андроид - UA Mo...Декларативное программирование клиент-серверных приложений на андроид - UA Mo...
Декларативное программирование клиент-серверных приложений на андроид - UA Mo...
UA Mobile
 
Leave your Room behind - UA Mobile 2019
Leave your Room behind - UA Mobile 2019Leave your Room behind - UA Mobile 2019
Leave your Room behind - UA Mobile 2019
UA Mobile
 
OpenId and OAuth2: Rear, Medium, Well Done - UA Mobile 2019
OpenId and OAuth2: Rear, Medium, Well Done - UA Mobile 2019OpenId and OAuth2: Rear, Medium, Well Done - UA Mobile 2019
OpenId and OAuth2: Rear, Medium, Well Done - UA Mobile 2019
UA Mobile
 
Google Wear OS watch faces and applications development - UA Mobile 2019
Google Wear OS watch faces and applications development - UA Mobile 2019Google Wear OS watch faces and applications development - UA Mobile 2019
Google Wear OS watch faces and applications development - UA Mobile 2019
UA Mobile
 
Історія декількох проектів та що в них пішло не так - UA Mobile 2019
Історія декількох проектів та що в них пішло не так - UA Mobile 2019Історія декількох проектів та що в них пішло не так - UA Mobile 2019
Історія декількох проектів та що в них пішло не так - UA Mobile 2019
UA Mobile
 
Managing State in Reactive applications - UA Mobile 2019
Managing State in Reactive applications - UA Mobile 2019Managing State in Reactive applications - UA Mobile 2019
Managing State in Reactive applications - UA Mobile 2019
UA Mobile
 
Ідіоматична ін'єкція залежностей на Kotlin без фреймворків - UA Mobile2019
Ідіоматична ін'єкція залежностей на Kotlin без фреймворків - UA Mobile2019Ідіоматична ін'єкція залежностей на Kotlin без фреймворків - UA Mobile2019
Ідіоматична ін'єкція залежностей на Kotlin без фреймворків - UA Mobile2019
UA Mobile
 
Актуальні практики дизайну мобільних додатків - UA Mobile 2019
Актуальні практики дизайну мобільних додатків - UA Mobile 2019Актуальні практики дизайну мобільних додатків - UA Mobile 2019
Актуальні практики дизайну мобільних додатків - UA Mobile 2019
UA Mobile
 
До чого прикладати Docker в Android? - UA Mobile 2019
До чого прикладати Docker в Android? - UA Mobile 2019До чого прикладати Docker в Android? - UA Mobile 2019
До чого прикладати Docker в Android? - UA Mobile 2019
UA Mobile
 
Building your Flutter apps using Redux - UA Mobile 2019
Building your Flutter apps using Redux - UA Mobile 2019Building your Flutter apps using Redux - UA Mobile 2019
Building your Flutter apps using Redux - UA Mobile 2019
UA Mobile
 
Optional. Tips and Tricks - UA Mobile 2019
Optional. Tips and Tricks - UA Mobile 2019Optional. Tips and Tricks - UA Mobile 2019
Optional. Tips and Tricks - UA Mobile 2019
UA Mobile
 
Designing iOS+Android project without using multiplatform frameworks - UA Mob...
Designing iOS+Android project without using multiplatform frameworks - UA Mob...Designing iOS+Android project without using multiplatform frameworks - UA Mob...
Designing iOS+Android project without using multiplatform frameworks - UA Mob...
UA Mobile
 
Бібліотеки та Інструменти на сторожі коду - UA Mobile 2019
Бібліотеки та Інструменти на сторожі коду - UA Mobile 2019Бібліотеки та Інструменти на сторожі коду - UA Mobile 2019
Бібліотеки та Інструменти на сторожі коду - UA Mobile 2019
UA Mobile
 
Flutter: No more boring apps! - UA Mobile 2019
Flutter: No more boring apps! - UA Mobile 2019Flutter: No more boring apps! - UA Mobile 2019
Flutter: No more boring apps! - UA Mobile 2019
UA Mobile
 
Долаючи прірву між дизайнерами та розробниками - UA Mobile 2019
Долаючи прірву між дизайнерами та розробниками - UA Mobile 2019Долаючи прірву між дизайнерами та розробниками - UA Mobile 2019
Долаючи прірву між дизайнерами та розробниками - UA Mobile 2019
UA Mobile
 
Multiplatform shared codebase with Kotlin/Native - UA Mobile 2019
Multiplatform shared codebase with Kotlin/Native - UA Mobile 2019Multiplatform shared codebase with Kotlin/Native - UA Mobile 2019
Multiplatform shared codebase with Kotlin/Native - UA Mobile 2019
UA Mobile
 
Sceneform SDK на практиці - UA Mobile 2019
Sceneform SDK на практиці - UA Mobile 2019Sceneform SDK на практиці - UA Mobile 2019
Sceneform SDK на практиці - UA Mobile 2019
UA Mobile
 
Coroutines in Kotlin. UA Mobile 2017.
Coroutines in Kotlin. UA Mobile 2017.Coroutines in Kotlin. UA Mobile 2017.
Coroutines in Kotlin. UA Mobile 2017.
UA Mobile
 
Augmented reality on Android. UA Mobile 2017.
Augmented reality on Android. UA Mobile 2017.Augmented reality on Android. UA Mobile 2017.
Augmented reality on Android. UA Mobile 2017.
UA Mobile
 
Designing iOS+Android project without using multiplatform frameworks - UA Mob...
Designing iOS+Android project without using multiplatform frameworks - UA Mob...Designing iOS+Android project without using multiplatform frameworks - UA Mob...
Designing iOS+Android project without using multiplatform frameworks - UA Mob...
UA Mobile
 
Декларативное программирование клиент-серверных приложений на андроид - UA Mo...
Декларативное программирование клиент-серверных приложений на андроид - UA Mo...Декларативное программирование клиент-серверных приложений на андроид - UA Mo...
Декларативное программирование клиент-серверных приложений на андроид - UA Mo...
UA Mobile
 
Leave your Room behind - UA Mobile 2019
Leave your Room behind - UA Mobile 2019Leave your Room behind - UA Mobile 2019
Leave your Room behind - UA Mobile 2019
UA Mobile
 
OpenId and OAuth2: Rear, Medium, Well Done - UA Mobile 2019
OpenId and OAuth2: Rear, Medium, Well Done - UA Mobile 2019OpenId and OAuth2: Rear, Medium, Well Done - UA Mobile 2019
OpenId and OAuth2: Rear, Medium, Well Done - UA Mobile 2019
UA Mobile
 
Google Wear OS watch faces and applications development - UA Mobile 2019
Google Wear OS watch faces and applications development - UA Mobile 2019Google Wear OS watch faces and applications development - UA Mobile 2019
Google Wear OS watch faces and applications development - UA Mobile 2019
UA Mobile
 
Історія декількох проектів та що в них пішло не так - UA Mobile 2019
Історія декількох проектів та що в них пішло не так - UA Mobile 2019Історія декількох проектів та що в них пішло не так - UA Mobile 2019
Історія декількох проектів та що в них пішло не так - UA Mobile 2019
UA Mobile
 
Managing State in Reactive applications - UA Mobile 2019
Managing State in Reactive applications - UA Mobile 2019Managing State in Reactive applications - UA Mobile 2019
Managing State in Reactive applications - UA Mobile 2019
UA Mobile
 
Ідіоматична ін'єкція залежностей на Kotlin без фреймворків - UA Mobile2019
Ідіоматична ін'єкція залежностей на Kotlin без фреймворків - UA Mobile2019Ідіоматична ін'єкція залежностей на Kotlin без фреймворків - UA Mobile2019
Ідіоматична ін'єкція залежностей на Kotlin без фреймворків - UA Mobile2019
UA Mobile
 
Актуальні практики дизайну мобільних додатків - UA Mobile 2019
Актуальні практики дизайну мобільних додатків - UA Mobile 2019Актуальні практики дизайну мобільних додатків - UA Mobile 2019
Актуальні практики дизайну мобільних додатків - UA Mobile 2019
UA Mobile
 
До чого прикладати Docker в Android? - UA Mobile 2019
До чого прикладати Docker в Android? - UA Mobile 2019До чого прикладати Docker в Android? - UA Mobile 2019
До чого прикладати Docker в Android? - UA Mobile 2019
UA Mobile
 
Building your Flutter apps using Redux - UA Mobile 2019
Building your Flutter apps using Redux - UA Mobile 2019Building your Flutter apps using Redux - UA Mobile 2019
Building your Flutter apps using Redux - UA Mobile 2019
UA Mobile
 
Optional. Tips and Tricks - UA Mobile 2019
Optional. Tips and Tricks - UA Mobile 2019Optional. Tips and Tricks - UA Mobile 2019
Optional. Tips and Tricks - UA Mobile 2019
UA Mobile
 
Designing iOS+Android project without using multiplatform frameworks - UA Mob...
Designing iOS+Android project without using multiplatform frameworks - UA Mob...Designing iOS+Android project without using multiplatform frameworks - UA Mob...
Designing iOS+Android project without using multiplatform frameworks - UA Mob...
UA Mobile
 
Бібліотеки та Інструменти на сторожі коду - UA Mobile 2019
Бібліотеки та Інструменти на сторожі коду - UA Mobile 2019Бібліотеки та Інструменти на сторожі коду - UA Mobile 2019
Бібліотеки та Інструменти на сторожі коду - UA Mobile 2019
UA Mobile
 
Flutter: No more boring apps! - UA Mobile 2019
Flutter: No more boring apps! - UA Mobile 2019Flutter: No more boring apps! - UA Mobile 2019
Flutter: No more boring apps! - UA Mobile 2019
UA Mobile
 
Долаючи прірву між дизайнерами та розробниками - UA Mobile 2019
Долаючи прірву між дизайнерами та розробниками - UA Mobile 2019Долаючи прірву між дизайнерами та розробниками - UA Mobile 2019
Долаючи прірву між дизайнерами та розробниками - UA Mobile 2019
UA Mobile
 
Multiplatform shared codebase with Kotlin/Native - UA Mobile 2019
Multiplatform shared codebase with Kotlin/Native - UA Mobile 2019Multiplatform shared codebase with Kotlin/Native - UA Mobile 2019
Multiplatform shared codebase with Kotlin/Native - UA Mobile 2019
UA Mobile
 
Sceneform SDK на практиці - UA Mobile 2019
Sceneform SDK на практиці - UA Mobile 2019Sceneform SDK на практиці - UA Mobile 2019
Sceneform SDK на практиці - UA Mobile 2019
UA Mobile
 
Coroutines in Kotlin. UA Mobile 2017.
Coroutines in Kotlin. UA Mobile 2017.Coroutines in Kotlin. UA Mobile 2017.
Coroutines in Kotlin. UA Mobile 2017.
UA Mobile
 
Augmented reality on Android. UA Mobile 2017.
Augmented reality on Android. UA Mobile 2017.Augmented reality on Android. UA Mobile 2017.
Augmented reality on Android. UA Mobile 2017.
UA Mobile
 
Ad

MVVM with Databinding and Google's new ViewModel. UA Mobile 2017.