SlideShare a Scribd company logo
Reactive Programming dengan
RXJava dan Kotlin Flow
Sidiq Permana
Co founder nbs.dev & Google Developer Expert
Apa yang akan kita pelajari?
● Reactive vs Imperative Programming
● Konsep Utama Reactive Programming
● Asynchronous dan Stream
● Observable - Operator - Observer
● Use Case Umum di Android
● Perbandingan Library
● Konklusi
Reactive vs Imperative
Programming
Dengan pendekatan imperatif, pengembang menulis kode yang
menentukan langkah-langkah yang harus diambil komputer untuk
mencapai tujuan. Ini kadang-kadang disebut sebagai pemrograman
algoritmik. Sebaliknya, pendekatan fungsional melibatkan penyusunan
masalah sebagai seperangkat aliran fungsi yang akan dijalankan untuk
memproses data.
Reactive vs Imperative
Programming
Reactive Programming
● Reactive Programming adalah istilah pemrograman umum yang berfokus
pada reaksi terhadap perubahan, seperti nilai data atau peristiwa (event).
● Dengan kata lain, pemrograman dengan aliran data asinkron yang
mengirimkan data ke konsumen (consumer) saat tersedia.
● Spreadsheet adalah contoh bagus dari pemrograman reaktif: sel yang
bergantung pada sel lain secara otomatis "bereaksi" saat sel lain itu
berubah.Resources.
Reactive Programming
Asynchronous dan Stream
Data
● Asynchronous adalah proses di mana Anda dapat menjalankan perintah
secara bersamaan.
● Stream Data adalah urutan data yang diurutkan dalam waktu
Observable - Operator -
Observer
Contoh
Urutan Pemrosesan Dengan
Chaining Operator
Urutan Pemrosesan Dengan
Chaining Operator
Hot dan Cold Stream
Cold Hot
Data
transmission
time
Lazy stream - new emitting process will start
when someone requests (subscribe)
Eager stream - the emitting process is always
broadcasted even no one asks
Number of
observer
Unicast - only has one observer Multicast - can have multiple observers
Location of data
created
Data is generated outside the stream Data is created in the stream
Simple analogy CDs that need to be played (request) first by
someone before listened
A radio that continues to broadcast even though no
one is listening. Many people can also listening
Contoh Hot Stream
Contoh Cold Stream
Contoh Cold Stream
Faedah menggunakan
Reactive Programming
Faedah Utama
● Aplikasi lebih reaktif terhadap event! Seperti memproses event
pengguna seperti ketuk dua kali, pencarian, tombol validasi, dan UX
kompleks lainnya.
● Mengakses data dari sumber data secara asinkron tanpa callback hell.
● Memproses data yang diperoleh dari API, seperti mengurutkan dan
memfilter data.
● Multi threading yang lebih baik.
Aplikasi Berasa Lebih Reaktif
Lebih Fokus Pada Hasil Akhir
Ketimbang Prosesnya
fun register(newUser: NewUser) {
val username: String = newUser.getUsername()
val password: String = newUser.getPassword()
api.register(newUser, object : Callback<Boolean>() {
fun onResponse(success: Boolean) {
if (success) {
api.login(username, password), object :
Callback<Token>() {
fun onResponse(token: Token) {
api.getUser(token, object :
Callback<UserDetails>() {
fun onResponse(userDetails:
UserDetails) {
// continue with app flow
}
})
}
})
}
}
})
}
fun register(newUser: NewUser) {
val username: String = newUser.getUsername()
val password: String = newUser.getPassword()
api.register(newUser)
.filter { success -> success }
.flatMap { success ->
api.login(username, password) }
.flatMap { token -> api.getUser(token) }
.subscribe { userDetails ->
// continue with app flow }
}
Lebih Fokus Pada Hasil Akhir
Ketimbang Prosesnya
Lebih Fokus Pada Hasil Akhir
Ketimbang Prosesnya
Multithreading yang lebih
cakep!
observeSomething()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe { name -> println(name)}
CoroutineScope(Dispatchers.Main).launch {
observeSomething()
.flowOn(Dispatchers.IO)
.collect { name -> println(name) }
}
Reactive Library
Membuat Data Stream
Observable.just("1", "2", "3", "4", "5", "6")
.map { string -> string.toInt() }
.filter { number -> number%2 == 1 }
.subscribe { result -> println("$result is odd number") }
Dengan Observable RXJava
CoroutineScope.launch {
flowOf("1", "2", "3", "4", "5", "6")
.map { string -> string.toInt() }
.filter { number -> number % 2 == 1 }
.collect { result -> println("$result is odd number") }
}
Dengan Flow
Tipe Stream
RxJava
● Observable: to emits unlimited data streams.
● Flowable: to emits unlimited data streams with back pressure strategy.
● Single: to emits one data only.
● Maybe: same as Single, but it can be no data.
● Completable: stream which can only complete without emitting values.
Flow
● Flow: There is no separate implementations without and with back pressure
support in Kotlin Flow.
Backpressure
Backpressure is a situation where the Publisher provides excessive data so that
the Subscriber cannot accommodate it. There are several back pressure
strategies to choose :
● BUFFER: Processes received data and waits for other data in the queue.
● DROP: Processes received data and ignores other data.
● LATEST: Processes received data, but stores the last element in cache.
● MISSING: Processes without using Backpressure Strategy, so you have to
make your own custom.
● ERROR: Notifies MissingBackpressureException error if process is not
robust.
Multithreading
observeSomething()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe { name -> println(name)}
CoroutineScope(Dispatchers.Main).launch {
observeSomething()
.flowOn(Dispatchers.IO)
.collect { name -> println(name) }
}
Common Schedulers and
Dispatcher
● io: to performs processes on the I/O Thread such as calling API and writing
databases.
● computation: to performs processes with high CPU requirements such as
converting bitmaps or compressing.
● main: to receives the result of the run on the Android Main/UI Thread.
● single: useful if you have multiple processes originating from different places
and want to merge them.
● custom: creates own custom scheduler with the help of Executor.
Perbandingan
RxJava Flow
Observable Types Observable, Flowable, Single, Maybe, Completable Flow (Only one)
Create Observable create, just, dll. flowOf
Get data subscribe collect
Context preservation subscribeOn, observeOn flowOn
Thread type Schedulers Dispatchers
Backpressure Manual By default handled by Flow
Request with Retrofit Need RxJava Adapter Can be used directly
Database with Room Need library Room RxJava Need library Room ktx
Lifecycle Management Using Disposable Using Scope
Kesimpulan
● RxJava dan Coroutine Flow memiliki kelebihan dan kekurangan dalam
implementasi terlebih dalam learning curve ketika adopsinya.
● Penggunaan tools tidak terlepas dari kebutuhan dan pemahaman yang
dimiliki kadang juga karena selera!
● Mempelajari dan memahami keduanya akan memperbanyak pilihan opsi
untuk penyelesaian masalah dengan tools yang tepat!
● Give it try and Enjoy!
Contact:
sidiq@nbs.co.id
THANKS!
Follow us: @dicoding

More Related Content

What's hot

Modul bahan-ajar-kecerdasan-buatan-ptiik-final
Modul bahan-ajar-kecerdasan-buatan-ptiik-finalModul bahan-ajar-kecerdasan-buatan-ptiik-final
Modul bahan-ajar-kecerdasan-buatan-ptiik-final
Ramla Lamantha
 
sql Modul
sql Modulsql Modul
sql Modul
SOYO UNIVERSITY
 
Mi 05.-praktikum-structured-query-language
Mi 05.-praktikum-structured-query-languageMi 05.-praktikum-structured-query-language
Mi 05.-praktikum-structured-query-language
Ayu Karisma Alfiana
 
Basis data
Basis dataBasis data
Basis datatafrikan
 
RPL 1 (Lama) - Perancangan Perangkat Lunak
RPL 1 (Lama) - Perancangan Perangkat LunakRPL 1 (Lama) - Perancangan Perangkat Lunak
RPL 1 (Lama) - Perancangan Perangkat Lunak
Adam Mukharil Bachtiar
 
Tugas RPL SRS Erwan
Tugas RPL SRS ErwanTugas RPL SRS Erwan
Tugas RPL SRS Erwan
Erwan Nur Arief
 
Algoritma Backtracking
Algoritma BacktrackingAlgoritma Backtracking
Algoritma Backtracking
Ajeng Savitri
 
Bab 8 rekursif
Bab 8 rekursifBab 8 rekursif
Bab 8 rekursif
arii_manroe
 
Integral fungsi rasional (2)
Integral fungsi rasional (2)Integral fungsi rasional (2)
Integral fungsi rasional (2)Ig Fandy Jayanto
 
Deret taylor and mac laurin
Deret taylor and mac laurinDeret taylor and mac laurin
Deret taylor and mac laurin
Moch Hasanudin
 
Algoritma dan Struktur Data - Struktur Data
Algoritma dan Struktur Data - Struktur DataAlgoritma dan Struktur Data - Struktur Data
Algoritma dan Struktur Data - Struktur Data
KuliahKita
 
Chapt 4. interaction(interaksi)
Chapt 4. interaction(interaksi)Chapt 4. interaction(interaksi)
Chapt 4. interaction(interaksi)Ibnu Dzakwan
 
Presentase calkaneus spur
Presentase calkaneus spurPresentase calkaneus spur
Presentase calkaneus spur
Bustanil Ervan
 
Ppt: Usability (Interaksi Manusia dan Komputer)
Ppt: Usability (Interaksi Manusia dan Komputer)Ppt: Usability (Interaksi Manusia dan Komputer)
Ppt: Usability (Interaksi Manusia dan Komputer)
agungt4565
 
Laporan praktikum basis data my sql
Laporan praktikum basis data my sqlLaporan praktikum basis data my sql
Laporan praktikum basis data my sqlLela Warni
 
Jenis dan proses interupsi
Jenis dan proses interupsiJenis dan proses interupsi
Jenis dan proses interupsi
laurensius08
 

What's hot (20)

Modul bahan-ajar-kecerdasan-buatan-ptiik-final
Modul bahan-ajar-kecerdasan-buatan-ptiik-finalModul bahan-ajar-kecerdasan-buatan-ptiik-final
Modul bahan-ajar-kecerdasan-buatan-ptiik-final
 
sql Modul
sql Modulsql Modul
sql Modul
 
Pengantar database
Pengantar databasePengantar database
Pengantar database
 
Mi 05.-praktikum-structured-query-language
Mi 05.-praktikum-structured-query-languageMi 05.-praktikum-structured-query-language
Mi 05.-praktikum-structured-query-language
 
Basis data
Basis dataBasis data
Basis data
 
RPL 1 (Lama) - Perancangan Perangkat Lunak
RPL 1 (Lama) - Perancangan Perangkat LunakRPL 1 (Lama) - Perancangan Perangkat Lunak
RPL 1 (Lama) - Perancangan Perangkat Lunak
 
Tugas RPL SRS Erwan
Tugas RPL SRS ErwanTugas RPL SRS Erwan
Tugas RPL SRS Erwan
 
Algoritma Backtracking
Algoritma BacktrackingAlgoritma Backtracking
Algoritma Backtracking
 
Bagian bagian sistem operasi
Bagian bagian sistem operasiBagian bagian sistem operasi
Bagian bagian sistem operasi
 
Bab 8 rekursif
Bab 8 rekursifBab 8 rekursif
Bab 8 rekursif
 
Integral fungsi rasional (2)
Integral fungsi rasional (2)Integral fungsi rasional (2)
Integral fungsi rasional (2)
 
relasi himpunan
relasi himpunanrelasi himpunan
relasi himpunan
 
Deret taylor and mac laurin
Deret taylor and mac laurinDeret taylor and mac laurin
Deret taylor and mac laurin
 
Kuliah 12-deret-taylor-maclaurin
Kuliah 12-deret-taylor-maclaurinKuliah 12-deret-taylor-maclaurin
Kuliah 12-deret-taylor-maclaurin
 
Algoritma dan Struktur Data - Struktur Data
Algoritma dan Struktur Data - Struktur DataAlgoritma dan Struktur Data - Struktur Data
Algoritma dan Struktur Data - Struktur Data
 
Chapt 4. interaction(interaksi)
Chapt 4. interaction(interaksi)Chapt 4. interaction(interaksi)
Chapt 4. interaction(interaksi)
 
Presentase calkaneus spur
Presentase calkaneus spurPresentase calkaneus spur
Presentase calkaneus spur
 
Ppt: Usability (Interaksi Manusia dan Komputer)
Ppt: Usability (Interaksi Manusia dan Komputer)Ppt: Usability (Interaksi Manusia dan Komputer)
Ppt: Usability (Interaksi Manusia dan Komputer)
 
Laporan praktikum basis data my sql
Laporan praktikum basis data my sqlLaporan praktikum basis data my sql
Laporan praktikum basis data my sql
 
Jenis dan proses interupsi
Jenis dan proses interupsiJenis dan proses interupsi
Jenis dan proses interupsi
 

Similar to Dicoding Developer Coaching #32: Android | Reactive Programming dengan RxJava & Flow

Apache Airflow in Production
Apache Airflow in ProductionApache Airflow in Production
Apache Airflow in Production
Robert Sanders
 
Airflow Intro-1.pdf
Airflow Intro-1.pdfAirflow Intro-1.pdf
Airflow Intro-1.pdf
BagustTriCahyo1
 
Stream processing - Apache flink
Stream processing - Apache flinkStream processing - Apache flink
Stream processing - Apache flink
Renato Guimaraes
 
Apache airflow
Apache airflowApache airflow
Apache airflow
Purna Chander
 
Rethinking Syncing at AltConf 2019
Rethinking Syncing at AltConf 2019Rethinking Syncing at AltConf 2019
Rethinking Syncing at AltConf 2019
Joe Keeley
 
"Offline mode for a mobile application, redux on server and a little bit abou...
"Offline mode for a mobile application, redux on server and a little bit abou..."Offline mode for a mobile application, redux on server and a little bit abou...
"Offline mode for a mobile application, redux on server and a little bit abou...
Viktor Turskyi
 
How I learned to time travel, or, data pipelining and scheduling with Airflow
How I learned to time travel, or, data pipelining and scheduling with AirflowHow I learned to time travel, or, data pipelining and scheduling with Airflow
How I learned to time travel, or, data pipelining and scheduling with Airflow
PyData
 
Thinking DevOps in the era of the Cloud - Demi Ben-Ari
Thinking DevOps in the era of the Cloud - Demi Ben-AriThinking DevOps in the era of the Cloud - Demi Ben-Ari
Thinking DevOps in the era of the Cloud - Demi Ben-Ari
Demi Ben-Ari
 
NoSQL meets Microservices - Michael Hackstein
NoSQL meets Microservices -  Michael HacksteinNoSQL meets Microservices -  Michael Hackstein
NoSQL meets Microservices - Michael Hackstein
distributed matters
 
Wayfair Storefront Performance Monitoring with InfluxEnterprise by Richard La...
Wayfair Storefront Performance Monitoring with InfluxEnterprise by Richard La...Wayfair Storefront Performance Monitoring with InfluxEnterprise by Richard La...
Wayfair Storefront Performance Monitoring with InfluxEnterprise by Richard La...
InfluxData
 
Hadoop cluster performance profiler
Hadoop cluster performance profilerHadoop cluster performance profiler
Hadoop cluster performance profiler
Ihor Bobak
 
FITC presents: Mobile & offline data synchronization in Angular JS
FITC presents: Mobile & offline data synchronization in Angular JSFITC presents: Mobile & offline data synchronization in Angular JS
FITC presents: Mobile & offline data synchronization in Angular JS
FITC
 
How I learned to time travel, or, data pipelining and scheduling with Airflow
How I learned to time travel, or, data pipelining and scheduling with AirflowHow I learned to time travel, or, data pipelining and scheduling with Airflow
How I learned to time travel, or, data pipelining and scheduling with Airflow
Laura Lorenz
 
Ten practical ways to improve front-end performance
Ten practical ways to improve front-end performanceTen practical ways to improve front-end performance
Ten practical ways to improve front-end performance
Andrew Rota
 
Apache Samza 1.0 - What's New, What's Next
Apache Samza 1.0 - What's New, What's NextApache Samza 1.0 - What's New, What's Next
Apache Samza 1.0 - What's New, What's Next
Prateek Maheshwari
 
Building a data pipeline to ingest data into Hadoop in minutes using Streamse...
Building a data pipeline to ingest data into Hadoop in minutes using Streamse...Building a data pipeline to ingest data into Hadoop in minutes using Streamse...
Building a data pipeline to ingest data into Hadoop in minutes using Streamse...
Guglielmo Iozzia
 
Working with data using Azure Functions.pdf
Working with data using Azure Functions.pdfWorking with data using Azure Functions.pdf
Working with data using Azure Functions.pdf
Stephanie Locke
 
High Throughput Data Analysis
High Throughput Data AnalysisHigh Throughput Data Analysis
High Throughput Data Analysis
J Singh
 
Monitoring Big Data Systems Done "The Simple Way" - Demi Ben-Ari - Codemotion...
Monitoring Big Data Systems Done "The Simple Way" - Demi Ben-Ari - Codemotion...Monitoring Big Data Systems Done "The Simple Way" - Demi Ben-Ari - Codemotion...
Monitoring Big Data Systems Done "The Simple Way" - Demi Ben-Ari - Codemotion...
Codemotion
 
Monitoring Big Data Systems "Done the simple way" - Demi Ben-Ari - Codemotion...
Monitoring Big Data Systems "Done the simple way" - Demi Ben-Ari - Codemotion...Monitoring Big Data Systems "Done the simple way" - Demi Ben-Ari - Codemotion...
Monitoring Big Data Systems "Done the simple way" - Demi Ben-Ari - Codemotion...
Demi Ben-Ari
 

Similar to Dicoding Developer Coaching #32: Android | Reactive Programming dengan RxJava & Flow (20)

Apache Airflow in Production
Apache Airflow in ProductionApache Airflow in Production
Apache Airflow in Production
 
Airflow Intro-1.pdf
Airflow Intro-1.pdfAirflow Intro-1.pdf
Airflow Intro-1.pdf
 
Stream processing - Apache flink
Stream processing - Apache flinkStream processing - Apache flink
Stream processing - Apache flink
 
Apache airflow
Apache airflowApache airflow
Apache airflow
 
Rethinking Syncing at AltConf 2019
Rethinking Syncing at AltConf 2019Rethinking Syncing at AltConf 2019
Rethinking Syncing at AltConf 2019
 
"Offline mode for a mobile application, redux on server and a little bit abou...
"Offline mode for a mobile application, redux on server and a little bit abou..."Offline mode for a mobile application, redux on server and a little bit abou...
"Offline mode for a mobile application, redux on server and a little bit abou...
 
How I learned to time travel, or, data pipelining and scheduling with Airflow
How I learned to time travel, or, data pipelining and scheduling with AirflowHow I learned to time travel, or, data pipelining and scheduling with Airflow
How I learned to time travel, or, data pipelining and scheduling with Airflow
 
Thinking DevOps in the era of the Cloud - Demi Ben-Ari
Thinking DevOps in the era of the Cloud - Demi Ben-AriThinking DevOps in the era of the Cloud - Demi Ben-Ari
Thinking DevOps in the era of the Cloud - Demi Ben-Ari
 
NoSQL meets Microservices - Michael Hackstein
NoSQL meets Microservices -  Michael HacksteinNoSQL meets Microservices -  Michael Hackstein
NoSQL meets Microservices - Michael Hackstein
 
Wayfair Storefront Performance Monitoring with InfluxEnterprise by Richard La...
Wayfair Storefront Performance Monitoring with InfluxEnterprise by Richard La...Wayfair Storefront Performance Monitoring with InfluxEnterprise by Richard La...
Wayfair Storefront Performance Monitoring with InfluxEnterprise by Richard La...
 
Hadoop cluster performance profiler
Hadoop cluster performance profilerHadoop cluster performance profiler
Hadoop cluster performance profiler
 
FITC presents: Mobile & offline data synchronization in Angular JS
FITC presents: Mobile & offline data synchronization in Angular JSFITC presents: Mobile & offline data synchronization in Angular JS
FITC presents: Mobile & offline data synchronization in Angular JS
 
How I learned to time travel, or, data pipelining and scheduling with Airflow
How I learned to time travel, or, data pipelining and scheduling with AirflowHow I learned to time travel, or, data pipelining and scheduling with Airflow
How I learned to time travel, or, data pipelining and scheduling with Airflow
 
Ten practical ways to improve front-end performance
Ten practical ways to improve front-end performanceTen practical ways to improve front-end performance
Ten practical ways to improve front-end performance
 
Apache Samza 1.0 - What's New, What's Next
Apache Samza 1.0 - What's New, What's NextApache Samza 1.0 - What's New, What's Next
Apache Samza 1.0 - What's New, What's Next
 
Building a data pipeline to ingest data into Hadoop in minutes using Streamse...
Building a data pipeline to ingest data into Hadoop in minutes using Streamse...Building a data pipeline to ingest data into Hadoop in minutes using Streamse...
Building a data pipeline to ingest data into Hadoop in minutes using Streamse...
 
Working with data using Azure Functions.pdf
Working with data using Azure Functions.pdfWorking with data using Azure Functions.pdf
Working with data using Azure Functions.pdf
 
High Throughput Data Analysis
High Throughput Data AnalysisHigh Throughput Data Analysis
High Throughput Data Analysis
 
Monitoring Big Data Systems Done "The Simple Way" - Demi Ben-Ari - Codemotion...
Monitoring Big Data Systems Done "The Simple Way" - Demi Ben-Ari - Codemotion...Monitoring Big Data Systems Done "The Simple Way" - Demi Ben-Ari - Codemotion...
Monitoring Big Data Systems Done "The Simple Way" - Demi Ben-Ari - Codemotion...
 
Monitoring Big Data Systems "Done the simple way" - Demi Ben-Ari - Codemotion...
Monitoring Big Data Systems "Done the simple way" - Demi Ben-Ari - Codemotion...Monitoring Big Data Systems "Done the simple way" - Demi Ben-Ari - Codemotion...
Monitoring Big Data Systems "Done the simple way" - Demi Ben-Ari - Codemotion...
 

More from DicodingEvent

Developer Coaching #114.pdf
Developer Coaching #114.pdfDeveloper Coaching #114.pdf
Developer Coaching #114.pdf
DicodingEvent
 
Ask Us Anything about Studi Independen Bersertifikat Kampus Merdeka X Dicodin...
Ask Us Anything about Studi Independen Bersertifikat Kampus Merdeka X Dicodin...Ask Us Anything about Studi Independen Bersertifikat Kampus Merdeka X Dicodin...
Ask Us Anything about Studi Independen Bersertifikat Kampus Merdeka X Dicodin...
DicodingEvent
 
tantangan menjadi developer di abad 21
tantangan menjadi developer di abad 21tantangan menjadi developer di abad 21
tantangan menjadi developer di abad 21
DicodingEvent
 
Mengenalkan augmented reality (ar) pada snapchat
Mengenalkan augmented reality (ar) pada snapchatMengenalkan augmented reality (ar) pada snapchat
Mengenalkan augmented reality (ar) pada snapchat
DicodingEvent
 
Membangun Aplikasi Serverless di Platfrom AWS
Membangun Aplikasi Serverless di Platfrom AWSMembangun Aplikasi Serverless di Platfrom AWS
Membangun Aplikasi Serverless di Platfrom AWS
DicodingEvent
 
IDCamp X Madrasah: Pengenalan Computational Thinking
IDCamp X Madrasah: Pengenalan Computational ThinkingIDCamp X Madrasah: Pengenalan Computational Thinking
IDCamp X Madrasah: Pengenalan Computational Thinking
DicodingEvent
 
Membuat Produk Digital Terbaik ala Startup Unicorn
Membuat Produk Digital Terbaik ala Startup UnicornMembuat Produk Digital Terbaik ala Startup Unicorn
Membuat Produk Digital Terbaik ala Startup Unicorn
DicodingEvent
 
TechTalk 2021: Peran IT Security dalam Penerapan DevOps
TechTalk 2021: Peran IT Security dalam Penerapan DevOpsTechTalk 2021: Peran IT Security dalam Penerapan DevOps
TechTalk 2021: Peran IT Security dalam Penerapan DevOps
DicodingEvent
 
TechTalk 2021: Peningkatan Performa Software Delivery dengan CI/CD
TechTalk 2021: Peningkatan Performa Software Delivery dengan CI/CDTechTalk 2021: Peningkatan Performa Software Delivery dengan CI/CD
TechTalk 2021: Peningkatan Performa Software Delivery dengan CI/CD
DicodingEvent
 
Membuat Solusi Bermanfaat dengan Programming - Nur Rohman
Membuat Solusi Bermanfaat dengan Programming - Nur RohmanMembuat Solusi Bermanfaat dengan Programming - Nur Rohman
Membuat Solusi Bermanfaat dengan Programming - Nur Rohman
DicodingEvent
 
Potensi karier menjadi ios developer di masa depan
Potensi karier menjadi ios developer di masa depanPotensi karier menjadi ios developer di masa depan
Potensi karier menjadi ios developer di masa depan
DicodingEvent
 
Id camp x dicoding live : persiapan jadi software engineer hebat 101
Id camp x dicoding live : persiapan jadi software engineer hebat 101Id camp x dicoding live : persiapan jadi software engineer hebat 101
Id camp x dicoding live : persiapan jadi software engineer hebat 101
DicodingEvent
 
Tips sukses berkarir sebagai developer dan programmer 2021
Tips sukses berkarir sebagai developer dan programmer 2021Tips sukses berkarir sebagai developer dan programmer 2021
Tips sukses berkarir sebagai developer dan programmer 2021
DicodingEvent
 
Teknologi Baru Android di Google I/O 2021 - Andrew Kurniadi
Teknologi Baru Android di Google I/O 2021 - Andrew KurniadiTeknologi Baru Android di Google I/O 2021 - Andrew Kurniadi
Teknologi Baru Android di Google I/O 2021 - Andrew Kurniadi
DicodingEvent
 
Dicoding Developer Coaching #38: Android | 5 Library Android yang Patut Kamu ...
Dicoding Developer Coaching #38: Android | 5 Library Android yang Patut Kamu ...Dicoding Developer Coaching #38: Android | 5 Library Android yang Patut Kamu ...
Dicoding Developer Coaching #38: Android | 5 Library Android yang Patut Kamu ...
DicodingEvent
 
Dicoding Developer Coaching #37: Android | Kesalahan yang Sering Terjadi pada...
Dicoding Developer Coaching #37: Android | Kesalahan yang Sering Terjadi pada...Dicoding Developer Coaching #37: Android | Kesalahan yang Sering Terjadi pada...
Dicoding Developer Coaching #37: Android | Kesalahan yang Sering Terjadi pada...
DicodingEvent
 
Pengantar Cloud Computing dengan AWS - Petra Novandi Barus
Pengantar Cloud Computing dengan AWS - Petra Novandi BarusPengantar Cloud Computing dengan AWS - Petra Novandi Barus
Pengantar Cloud Computing dengan AWS - Petra Novandi Barus
DicodingEvent
 
Dicoding Developer Coaching #36: Android | Pentingnya Performa pada Aplikasi ...
Dicoding Developer Coaching #36: Android | Pentingnya Performa pada Aplikasi ...Dicoding Developer Coaching #36: Android | Pentingnya Performa pada Aplikasi ...
Dicoding Developer Coaching #36: Android | Pentingnya Performa pada Aplikasi ...
DicodingEvent
 
Dicoding Developer Coaching #34: Android | Modular Android App dengan Dynamic...
Dicoding Developer Coaching #34: Android | Modular Android App dengan Dynamic...Dicoding Developer Coaching #34: Android | Modular Android App dengan Dynamic...
Dicoding Developer Coaching #34: Android | Modular Android App dengan Dynamic...
DicodingEvent
 
Dicoding Developer Coaching #35: Android | Setup Continuous Integration di An...
Dicoding Developer Coaching #35: Android | Setup Continuous Integration di An...Dicoding Developer Coaching #35: Android | Setup Continuous Integration di An...
Dicoding Developer Coaching #35: Android | Setup Continuous Integration di An...
DicodingEvent
 

More from DicodingEvent (20)

Developer Coaching #114.pdf
Developer Coaching #114.pdfDeveloper Coaching #114.pdf
Developer Coaching #114.pdf
 
Ask Us Anything about Studi Independen Bersertifikat Kampus Merdeka X Dicodin...
Ask Us Anything about Studi Independen Bersertifikat Kampus Merdeka X Dicodin...Ask Us Anything about Studi Independen Bersertifikat Kampus Merdeka X Dicodin...
Ask Us Anything about Studi Independen Bersertifikat Kampus Merdeka X Dicodin...
 
tantangan menjadi developer di abad 21
tantangan menjadi developer di abad 21tantangan menjadi developer di abad 21
tantangan menjadi developer di abad 21
 
Mengenalkan augmented reality (ar) pada snapchat
Mengenalkan augmented reality (ar) pada snapchatMengenalkan augmented reality (ar) pada snapchat
Mengenalkan augmented reality (ar) pada snapchat
 
Membangun Aplikasi Serverless di Platfrom AWS
Membangun Aplikasi Serverless di Platfrom AWSMembangun Aplikasi Serverless di Platfrom AWS
Membangun Aplikasi Serverless di Platfrom AWS
 
IDCamp X Madrasah: Pengenalan Computational Thinking
IDCamp X Madrasah: Pengenalan Computational ThinkingIDCamp X Madrasah: Pengenalan Computational Thinking
IDCamp X Madrasah: Pengenalan Computational Thinking
 
Membuat Produk Digital Terbaik ala Startup Unicorn
Membuat Produk Digital Terbaik ala Startup UnicornMembuat Produk Digital Terbaik ala Startup Unicorn
Membuat Produk Digital Terbaik ala Startup Unicorn
 
TechTalk 2021: Peran IT Security dalam Penerapan DevOps
TechTalk 2021: Peran IT Security dalam Penerapan DevOpsTechTalk 2021: Peran IT Security dalam Penerapan DevOps
TechTalk 2021: Peran IT Security dalam Penerapan DevOps
 
TechTalk 2021: Peningkatan Performa Software Delivery dengan CI/CD
TechTalk 2021: Peningkatan Performa Software Delivery dengan CI/CDTechTalk 2021: Peningkatan Performa Software Delivery dengan CI/CD
TechTalk 2021: Peningkatan Performa Software Delivery dengan CI/CD
 
Membuat Solusi Bermanfaat dengan Programming - Nur Rohman
Membuat Solusi Bermanfaat dengan Programming - Nur RohmanMembuat Solusi Bermanfaat dengan Programming - Nur Rohman
Membuat Solusi Bermanfaat dengan Programming - Nur Rohman
 
Potensi karier menjadi ios developer di masa depan
Potensi karier menjadi ios developer di masa depanPotensi karier menjadi ios developer di masa depan
Potensi karier menjadi ios developer di masa depan
 
Id camp x dicoding live : persiapan jadi software engineer hebat 101
Id camp x dicoding live : persiapan jadi software engineer hebat 101Id camp x dicoding live : persiapan jadi software engineer hebat 101
Id camp x dicoding live : persiapan jadi software engineer hebat 101
 
Tips sukses berkarir sebagai developer dan programmer 2021
Tips sukses berkarir sebagai developer dan programmer 2021Tips sukses berkarir sebagai developer dan programmer 2021
Tips sukses berkarir sebagai developer dan programmer 2021
 
Teknologi Baru Android di Google I/O 2021 - Andrew Kurniadi
Teknologi Baru Android di Google I/O 2021 - Andrew KurniadiTeknologi Baru Android di Google I/O 2021 - Andrew Kurniadi
Teknologi Baru Android di Google I/O 2021 - Andrew Kurniadi
 
Dicoding Developer Coaching #38: Android | 5 Library Android yang Patut Kamu ...
Dicoding Developer Coaching #38: Android | 5 Library Android yang Patut Kamu ...Dicoding Developer Coaching #38: Android | 5 Library Android yang Patut Kamu ...
Dicoding Developer Coaching #38: Android | 5 Library Android yang Patut Kamu ...
 
Dicoding Developer Coaching #37: Android | Kesalahan yang Sering Terjadi pada...
Dicoding Developer Coaching #37: Android | Kesalahan yang Sering Terjadi pada...Dicoding Developer Coaching #37: Android | Kesalahan yang Sering Terjadi pada...
Dicoding Developer Coaching #37: Android | Kesalahan yang Sering Terjadi pada...
 
Pengantar Cloud Computing dengan AWS - Petra Novandi Barus
Pengantar Cloud Computing dengan AWS - Petra Novandi BarusPengantar Cloud Computing dengan AWS - Petra Novandi Barus
Pengantar Cloud Computing dengan AWS - Petra Novandi Barus
 
Dicoding Developer Coaching #36: Android | Pentingnya Performa pada Aplikasi ...
Dicoding Developer Coaching #36: Android | Pentingnya Performa pada Aplikasi ...Dicoding Developer Coaching #36: Android | Pentingnya Performa pada Aplikasi ...
Dicoding Developer Coaching #36: Android | Pentingnya Performa pada Aplikasi ...
 
Dicoding Developer Coaching #34: Android | Modular Android App dengan Dynamic...
Dicoding Developer Coaching #34: Android | Modular Android App dengan Dynamic...Dicoding Developer Coaching #34: Android | Modular Android App dengan Dynamic...
Dicoding Developer Coaching #34: Android | Modular Android App dengan Dynamic...
 
Dicoding Developer Coaching #35: Android | Setup Continuous Integration di An...
Dicoding Developer Coaching #35: Android | Setup Continuous Integration di An...Dicoding Developer Coaching #35: Android | Setup Continuous Integration di An...
Dicoding Developer Coaching #35: Android | Setup Continuous Integration di An...
 

Recently uploaded

Doctoral Symposium at the 17th IEEE International Conference on Software Test...
Doctoral Symposium at the 17th IEEE International Conference on Software Test...Doctoral Symposium at the 17th IEEE International Conference on Software Test...
Doctoral Symposium at the 17th IEEE International Conference on Software Test...
Sebastiano Panichella
 
Gregory Harris - Cycle 2 - Civics Presentation
Gregory Harris - Cycle 2 - Civics PresentationGregory Harris - Cycle 2 - Civics Presentation
Gregory Harris - Cycle 2 - Civics Presentation
gharris9
 
Presentatie 8. Joost van der Linde & Daniel Anderton - Eliq 28 mei 2024
Presentatie 8. Joost van der Linde & Daniel Anderton - Eliq 28 mei 2024Presentatie 8. Joost van der Linde & Daniel Anderton - Eliq 28 mei 2024
Presentatie 8. Joost van der Linde & Daniel Anderton - Eliq 28 mei 2024
Dutch Power
 
Presentatie 4. Jochen Cremer - TU Delft 28 mei 2024
Presentatie 4. Jochen Cremer - TU Delft 28 mei 2024Presentatie 4. Jochen Cremer - TU Delft 28 mei 2024
Presentatie 4. Jochen Cremer - TU Delft 28 mei 2024
Dutch Power
 
Collapsing Narratives: Exploring Non-Linearity • a micro report by Rosie Wells
Collapsing Narratives: Exploring Non-Linearity • a micro report by Rosie WellsCollapsing Narratives: Exploring Non-Linearity • a micro report by Rosie Wells
Collapsing Narratives: Exploring Non-Linearity • a micro report by Rosie Wells
Rosie Wells
 
María Carolina Martínez - eCommerce Day Colombia 2024
María Carolina Martínez - eCommerce Day Colombia 2024María Carolina Martínez - eCommerce Day Colombia 2024
María Carolina Martínez - eCommerce Day Colombia 2024
eCommerce Institute
 
AWANG ANIQKMALBIN AWANG TAJUDIN B22080004 ASSIGNMENT 2 MPU3193 PHILOSOPHY AND...
AWANG ANIQKMALBIN AWANG TAJUDIN B22080004 ASSIGNMENT 2 MPU3193 PHILOSOPHY AND...AWANG ANIQKMALBIN AWANG TAJUDIN B22080004 ASSIGNMENT 2 MPU3193 PHILOSOPHY AND...
AWANG ANIQKMALBIN AWANG TAJUDIN B22080004 ASSIGNMENT 2 MPU3193 PHILOSOPHY AND...
AwangAniqkmals
 
Supercharge your AI - SSP Industry Breakout Session 2024-v2_1.pdf
Supercharge your AI - SSP Industry Breakout Session 2024-v2_1.pdfSupercharge your AI - SSP Industry Breakout Session 2024-v2_1.pdf
Supercharge your AI - SSP Industry Breakout Session 2024-v2_1.pdf
Access Innovations, Inc.
 
Gregory Harris' Civics Presentation.pptx
Gregory Harris' Civics Presentation.pptxGregory Harris' Civics Presentation.pptx
Gregory Harris' Civics Presentation.pptx
gharris9
 
Mastering the Concepts Tested in the Databricks Certified Data Engineer Assoc...
Mastering the Concepts Tested in the Databricks Certified Data Engineer Assoc...Mastering the Concepts Tested in the Databricks Certified Data Engineer Assoc...
Mastering the Concepts Tested in the Databricks Certified Data Engineer Assoc...
SkillCertProExams
 
Tom tresser burning issue.pptx My Burning issue
Tom tresser burning issue.pptx My Burning issueTom tresser burning issue.pptx My Burning issue
Tom tresser burning issue.pptx My Burning issue
amekonnen
 
Burning Issue Presentation By Kenmaryon.pdf
Burning Issue Presentation By Kenmaryon.pdfBurning Issue Presentation By Kenmaryon.pdf
Burning Issue Presentation By Kenmaryon.pdf
kkirkland2
 
Announcement of 18th IEEE International Conference on Software Testing, Verif...
Announcement of 18th IEEE International Conference on Software Testing, Verif...Announcement of 18th IEEE International Conference on Software Testing, Verif...
Announcement of 18th IEEE International Conference on Software Testing, Verif...
Sebastiano Panichella
 
Bonzo subscription_hjjjjjjjj5hhhhhhh_2024.pdf
Bonzo subscription_hjjjjjjjj5hhhhhhh_2024.pdfBonzo subscription_hjjjjjjjj5hhhhhhh_2024.pdf
Bonzo subscription_hjjjjjjjj5hhhhhhh_2024.pdf
khadija278284
 
International Workshop on Artificial Intelligence in Software Testing
International Workshop on Artificial Intelligence in Software TestingInternational Workshop on Artificial Intelligence in Software Testing
International Workshop on Artificial Intelligence in Software Testing
Sebastiano Panichella
 
Media as a Mind Controlling Strategy In Old and Modern Era
Media as a Mind Controlling Strategy In Old and Modern EraMedia as a Mind Controlling Strategy In Old and Modern Era
Media as a Mind Controlling Strategy In Old and Modern Era
faizulhassanfaiz1670
 
ASONAM2023_presection_slide_track-recommendation.pdf
ASONAM2023_presection_slide_track-recommendation.pdfASONAM2023_presection_slide_track-recommendation.pdf
ASONAM2023_presection_slide_track-recommendation.pdf
ToshihiroIto4
 
2024-05-30_meetup_devops_aix-marseille.pdf
2024-05-30_meetup_devops_aix-marseille.pdf2024-05-30_meetup_devops_aix-marseille.pdf
2024-05-30_meetup_devops_aix-marseille.pdf
Frederic Leger
 
Suzanne Lagerweij - Influence Without Power - Why Empathy is Your Best Friend...
Suzanne Lagerweij - Influence Without Power - Why Empathy is Your Best Friend...Suzanne Lagerweij - Influence Without Power - Why Empathy is Your Best Friend...
Suzanne Lagerweij - Influence Without Power - Why Empathy is Your Best Friend...
Suzanne Lagerweij
 

Recently uploaded (19)

Doctoral Symposium at the 17th IEEE International Conference on Software Test...
Doctoral Symposium at the 17th IEEE International Conference on Software Test...Doctoral Symposium at the 17th IEEE International Conference on Software Test...
Doctoral Symposium at the 17th IEEE International Conference on Software Test...
 
Gregory Harris - Cycle 2 - Civics Presentation
Gregory Harris - Cycle 2 - Civics PresentationGregory Harris - Cycle 2 - Civics Presentation
Gregory Harris - Cycle 2 - Civics Presentation
 
Presentatie 8. Joost van der Linde & Daniel Anderton - Eliq 28 mei 2024
Presentatie 8. Joost van der Linde & Daniel Anderton - Eliq 28 mei 2024Presentatie 8. Joost van der Linde & Daniel Anderton - Eliq 28 mei 2024
Presentatie 8. Joost van der Linde & Daniel Anderton - Eliq 28 mei 2024
 
Presentatie 4. Jochen Cremer - TU Delft 28 mei 2024
Presentatie 4. Jochen Cremer - TU Delft 28 mei 2024Presentatie 4. Jochen Cremer - TU Delft 28 mei 2024
Presentatie 4. Jochen Cremer - TU Delft 28 mei 2024
 
Collapsing Narratives: Exploring Non-Linearity • a micro report by Rosie Wells
Collapsing Narratives: Exploring Non-Linearity • a micro report by Rosie WellsCollapsing Narratives: Exploring Non-Linearity • a micro report by Rosie Wells
Collapsing Narratives: Exploring Non-Linearity • a micro report by Rosie Wells
 
María Carolina Martínez - eCommerce Day Colombia 2024
María Carolina Martínez - eCommerce Day Colombia 2024María Carolina Martínez - eCommerce Day Colombia 2024
María Carolina Martínez - eCommerce Day Colombia 2024
 
AWANG ANIQKMALBIN AWANG TAJUDIN B22080004 ASSIGNMENT 2 MPU3193 PHILOSOPHY AND...
AWANG ANIQKMALBIN AWANG TAJUDIN B22080004 ASSIGNMENT 2 MPU3193 PHILOSOPHY AND...AWANG ANIQKMALBIN AWANG TAJUDIN B22080004 ASSIGNMENT 2 MPU3193 PHILOSOPHY AND...
AWANG ANIQKMALBIN AWANG TAJUDIN B22080004 ASSIGNMENT 2 MPU3193 PHILOSOPHY AND...
 
Supercharge your AI - SSP Industry Breakout Session 2024-v2_1.pdf
Supercharge your AI - SSP Industry Breakout Session 2024-v2_1.pdfSupercharge your AI - SSP Industry Breakout Session 2024-v2_1.pdf
Supercharge your AI - SSP Industry Breakout Session 2024-v2_1.pdf
 
Gregory Harris' Civics Presentation.pptx
Gregory Harris' Civics Presentation.pptxGregory Harris' Civics Presentation.pptx
Gregory Harris' Civics Presentation.pptx
 
Mastering the Concepts Tested in the Databricks Certified Data Engineer Assoc...
Mastering the Concepts Tested in the Databricks Certified Data Engineer Assoc...Mastering the Concepts Tested in the Databricks Certified Data Engineer Assoc...
Mastering the Concepts Tested in the Databricks Certified Data Engineer Assoc...
 
Tom tresser burning issue.pptx My Burning issue
Tom tresser burning issue.pptx My Burning issueTom tresser burning issue.pptx My Burning issue
Tom tresser burning issue.pptx My Burning issue
 
Burning Issue Presentation By Kenmaryon.pdf
Burning Issue Presentation By Kenmaryon.pdfBurning Issue Presentation By Kenmaryon.pdf
Burning Issue Presentation By Kenmaryon.pdf
 
Announcement of 18th IEEE International Conference on Software Testing, Verif...
Announcement of 18th IEEE International Conference on Software Testing, Verif...Announcement of 18th IEEE International Conference on Software Testing, Verif...
Announcement of 18th IEEE International Conference on Software Testing, Verif...
 
Bonzo subscription_hjjjjjjjj5hhhhhhh_2024.pdf
Bonzo subscription_hjjjjjjjj5hhhhhhh_2024.pdfBonzo subscription_hjjjjjjjj5hhhhhhh_2024.pdf
Bonzo subscription_hjjjjjjjj5hhhhhhh_2024.pdf
 
International Workshop on Artificial Intelligence in Software Testing
International Workshop on Artificial Intelligence in Software TestingInternational Workshop on Artificial Intelligence in Software Testing
International Workshop on Artificial Intelligence in Software Testing
 
Media as a Mind Controlling Strategy In Old and Modern Era
Media as a Mind Controlling Strategy In Old and Modern EraMedia as a Mind Controlling Strategy In Old and Modern Era
Media as a Mind Controlling Strategy In Old and Modern Era
 
ASONAM2023_presection_slide_track-recommendation.pdf
ASONAM2023_presection_slide_track-recommendation.pdfASONAM2023_presection_slide_track-recommendation.pdf
ASONAM2023_presection_slide_track-recommendation.pdf
 
2024-05-30_meetup_devops_aix-marseille.pdf
2024-05-30_meetup_devops_aix-marseille.pdf2024-05-30_meetup_devops_aix-marseille.pdf
2024-05-30_meetup_devops_aix-marseille.pdf
 
Suzanne Lagerweij - Influence Without Power - Why Empathy is Your Best Friend...
Suzanne Lagerweij - Influence Without Power - Why Empathy is Your Best Friend...Suzanne Lagerweij - Influence Without Power - Why Empathy is Your Best Friend...
Suzanne Lagerweij - Influence Without Power - Why Empathy is Your Best Friend...
 

Dicoding Developer Coaching #32: Android | Reactive Programming dengan RxJava & Flow

  • 1. Reactive Programming dengan RXJava dan Kotlin Flow Sidiq Permana Co founder nbs.dev & Google Developer Expert
  • 2. Apa yang akan kita pelajari? ● Reactive vs Imperative Programming ● Konsep Utama Reactive Programming ● Asynchronous dan Stream ● Observable - Operator - Observer ● Use Case Umum di Android ● Perbandingan Library ● Konklusi
  • 3. Reactive vs Imperative Programming Dengan pendekatan imperatif, pengembang menulis kode yang menentukan langkah-langkah yang harus diambil komputer untuk mencapai tujuan. Ini kadang-kadang disebut sebagai pemrograman algoritmik. Sebaliknya, pendekatan fungsional melibatkan penyusunan masalah sebagai seperangkat aliran fungsi yang akan dijalankan untuk memproses data.
  • 5. Reactive Programming ● Reactive Programming adalah istilah pemrograman umum yang berfokus pada reaksi terhadap perubahan, seperti nilai data atau peristiwa (event). ● Dengan kata lain, pemrograman dengan aliran data asinkron yang mengirimkan data ke konsumen (consumer) saat tersedia. ● Spreadsheet adalah contoh bagus dari pemrograman reaktif: sel yang bergantung pada sel lain secara otomatis "bereaksi" saat sel lain itu berubah.Resources.
  • 7. Asynchronous dan Stream Data ● Asynchronous adalah proses di mana Anda dapat menjalankan perintah secara bersamaan. ● Stream Data adalah urutan data yang diurutkan dalam waktu
  • 12. Hot dan Cold Stream Cold Hot Data transmission time Lazy stream - new emitting process will start when someone requests (subscribe) Eager stream - the emitting process is always broadcasted even no one asks Number of observer Unicast - only has one observer Multicast - can have multiple observers Location of data created Data is generated outside the stream Data is created in the stream Simple analogy CDs that need to be played (request) first by someone before listened A radio that continues to broadcast even though no one is listening. Many people can also listening
  • 17. Faedah Utama ● Aplikasi lebih reaktif terhadap event! Seperti memproses event pengguna seperti ketuk dua kali, pencarian, tombol validasi, dan UX kompleks lainnya. ● Mengakses data dari sumber data secara asinkron tanpa callback hell. ● Memproses data yang diperoleh dari API, seperti mengurutkan dan memfilter data. ● Multi threading yang lebih baik.
  • 19. Lebih Fokus Pada Hasil Akhir Ketimbang Prosesnya fun register(newUser: NewUser) { val username: String = newUser.getUsername() val password: String = newUser.getPassword() api.register(newUser, object : Callback<Boolean>() { fun onResponse(success: Boolean) { if (success) { api.login(username, password), object : Callback<Token>() { fun onResponse(token: Token) { api.getUser(token, object : Callback<UserDetails>() { fun onResponse(userDetails: UserDetails) { // continue with app flow } }) } }) } } }) } fun register(newUser: NewUser) { val username: String = newUser.getUsername() val password: String = newUser.getPassword() api.register(newUser) .filter { success -> success } .flatMap { success -> api.login(username, password) } .flatMap { token -> api.getUser(token) } .subscribe { userDetails -> // continue with app flow } }
  • 20. Lebih Fokus Pada Hasil Akhir Ketimbang Prosesnya
  • 21. Lebih Fokus Pada Hasil Akhir Ketimbang Prosesnya
  • 22. Multithreading yang lebih cakep! observeSomething() .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe { name -> println(name)} CoroutineScope(Dispatchers.Main).launch { observeSomething() .flowOn(Dispatchers.IO) .collect { name -> println(name) } }
  • 24. Membuat Data Stream Observable.just("1", "2", "3", "4", "5", "6") .map { string -> string.toInt() } .filter { number -> number%2 == 1 } .subscribe { result -> println("$result is odd number") } Dengan Observable RXJava CoroutineScope.launch { flowOf("1", "2", "3", "4", "5", "6") .map { string -> string.toInt() } .filter { number -> number % 2 == 1 } .collect { result -> println("$result is odd number") } } Dengan Flow
  • 25. Tipe Stream RxJava ● Observable: to emits unlimited data streams. ● Flowable: to emits unlimited data streams with back pressure strategy. ● Single: to emits one data only. ● Maybe: same as Single, but it can be no data. ● Completable: stream which can only complete without emitting values. Flow ● Flow: There is no separate implementations without and with back pressure support in Kotlin Flow.
  • 26. Backpressure Backpressure is a situation where the Publisher provides excessive data so that the Subscriber cannot accommodate it. There are several back pressure strategies to choose : ● BUFFER: Processes received data and waits for other data in the queue. ● DROP: Processes received data and ignores other data. ● LATEST: Processes received data, but stores the last element in cache. ● MISSING: Processes without using Backpressure Strategy, so you have to make your own custom. ● ERROR: Notifies MissingBackpressureException error if process is not robust.
  • 27. Multithreading observeSomething() .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe { name -> println(name)} CoroutineScope(Dispatchers.Main).launch { observeSomething() .flowOn(Dispatchers.IO) .collect { name -> println(name) } }
  • 28. Common Schedulers and Dispatcher ● io: to performs processes on the I/O Thread such as calling API and writing databases. ● computation: to performs processes with high CPU requirements such as converting bitmaps or compressing. ● main: to receives the result of the run on the Android Main/UI Thread. ● single: useful if you have multiple processes originating from different places and want to merge them. ● custom: creates own custom scheduler with the help of Executor.
  • 29. Perbandingan RxJava Flow Observable Types Observable, Flowable, Single, Maybe, Completable Flow (Only one) Create Observable create, just, dll. flowOf Get data subscribe collect Context preservation subscribeOn, observeOn flowOn Thread type Schedulers Dispatchers Backpressure Manual By default handled by Flow Request with Retrofit Need RxJava Adapter Can be used directly Database with Room Need library Room RxJava Need library Room ktx Lifecycle Management Using Disposable Using Scope
  • 30. Kesimpulan ● RxJava dan Coroutine Flow memiliki kelebihan dan kekurangan dalam implementasi terlebih dalam learning curve ketika adopsinya. ● Penggunaan tools tidak terlepas dari kebutuhan dan pemahaman yang dimiliki kadang juga karena selera! ● Mempelajari dan memahami keduanya akan memperbanyak pilihan opsi untuk penyelesaian masalah dengan tools yang tepat! ● Give it try and Enjoy!