SlideShare a Scribd company logo
1 of 25
Download to read offline
Membangun Modern App dengan
Jetpack & Android Architecture
Component
Ahmad Arif Faizin
Google Associate Android Developer, Curriculum Developer Dicoding
Modern App
Menggunakan teknologi terbaru
Lebih mudah, lebih cepat, lebih happy
Modern Android Development (MAD) Skills
https://madscorecard.withgoogle.com/scorecard/share/3800404497/
Android Jetpack?
Kiri, Kanan, L1, L2, R1, R2, Atas, Bawah, Kiri, Kanan
Android Jetpack
is a suite of libraries to help developers follow best practices, reduce
boilerplate code, and write code that works consistently across
Android versions and devices so that developers can focus on the
code they care about.
Why Android Jetpack?
"With Android Architecture Components, we're re-architecting our entire
app. It's great to have a Google-endorsed, opinionated, and clean way to
build an Android app that makes it easier to support configuration
changes."
Drew Hannay, Staff Software Engineer, LinkedIn
Now...
85++ libraries
Dibagi berdasarkan :
● Beyond phone
● Data
● Graphics
● Lifecycle
● Media
● Navigation
● Security
● Performance/Test
● UI
Highlighted Libraries
AAC
(Android Architecture Component)
best practices and recommended architecture for
building robust, production-quality apps
Hindari short-term hack!
● Mendesain aplikasi hanya untuk perangkat tertentu saja
● Copy paste kode ke dalam file Anda secara membabi buta
● Menuliskan secara hardcode untuk string yang tampil
● Menempatkan semua business logic dalam file Activity
Why you need good app
architecture?
● Separation of Concern (SoC), memisahkan business logic dan ui logic.
● Memudahkan developer untuk saling berkolaborasi.
● Kode jadi lebih mudah dites.
● Menghemat waktu dan mengurangi technical debt saat project berkembang.
Komponen AAC
Komponen AAC
● ViewModel - Handle data ke UI dan mengatasi configuration change
● LiveData - data holder yang lifecycle-aware dan bisa di-observe secara
real-time untuk mendapatkan data terbaru
● Repository - untuk mengatur beberapa sumber data (network, database,
cache)
● Room - abstraksi di atas SQLite, untuk simpan database dengan lebih simple
dan mudah
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
...
//initiate TextView
//get data from Webservice (DON’T!)
val response = webservice.getUser(userId)
//show data in TextView
}
}
Sample of Bad Code
class UserRepository constructor(
private val webservice: Webservice, //network : retrofit
private val userDao: UserDao //local data : room
) {
suspend fun getUser(userId: String): User {
val userExists = userDao.hasUser()
//jika data local kosong, request network dan masukkan ke local
if (!userExists) {
val response = webservice.getUser(userId)
userDao.save(response.body())
}
return userDao.getUser(userId)
}
}
Sample of Repository
class UserProfileViewModel(
userRepository: UserRepository
) : ViewModel() {
private val _userId = MutableLiveData<String>()
val userId: LiveData<String> = _userId
fun setUserId(userId: String) {
_userId.value = userId
}
val user = Transformations.switchMap(_userId) { id ->
userRepository.getUser(id)
}
}
Sample of ViewModel + LiveData
class MainActivity : AppCompatActivity() {
val viewModel: UserProfileViewModel by viewModels()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
...
//initiate TextView
viewModel.setUserId(userId)
viewModel.user.observe(this, Observer<User> {
//show data in TextView
})
}
}
Sample of Good Code
Best Practice
● Jangan jadikan activity, services, & broadcast sebagai sumber data.
● Buat batasan yang jelas antar modul.
● Expose sedikit mungkin data pada setiap modul.
● Pertimbangkan cara membuat setiap modul dapat diuji secara terpisah.
● Fokuslah pada inti aplikasi Anda supaya lebih bagus dari aplikasi lainnya.
● Sebisa mungkin simpan data yang relevan dan terbaru.
● Tetapkan satu sumber data sebagai single source of truth.
Contact:
@arif_faizin
THANKS!
Follow us: @dicoding

More Related Content

What's hot

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
 
Dicoding Developer Coaching #33: Android | Depedency Injection dengan Dagger,...
Dicoding Developer Coaching #33: Android | Depedency Injection dengan Dagger,...Dicoding Developer Coaching #33: Android | Depedency Injection dengan Dagger,...
Dicoding Developer Coaching #33: Android | Depedency Injection dengan Dagger,...DicodingEvent
 
ID Android Dev Talk - Observer Pattern, Event Bus Usage, Firebase & Geofire
ID Android Dev Talk  - Observer Pattern, Event Bus Usage, Firebase & GeofireID Android Dev Talk  - Observer Pattern, Event Bus Usage, Firebase & Geofire
ID Android Dev Talk - Observer Pattern, Event Bus Usage, Firebase & GeofireDicoding
 
Beginner's Guide to React & Redux Development
Beginner's Guide to React & Redux DevelopmentBeginner's Guide to React & Redux Development
Beginner's Guide to React & Redux DevelopmentYoza Aprilio
 
Rekayasa web
Rekayasa webRekayasa web
Rekayasa webreksa eka
 
ActiveX - Plugin My Project
ActiveX - Plugin My ProjectActiveX - Plugin My Project
ActiveX - Plugin My Projectpadisoft
 
Tugas 1 ihsan riadi - 1412511162
Tugas 1   ihsan riadi - 1412511162Tugas 1   ihsan riadi - 1412511162
Tugas 1 ihsan riadi - 1412511162ihsan riadi
 
Presensi SM Findout Project ABC
Presensi SM Findout Project ABCPresensi SM Findout Project ABC
Presensi SM Findout Project ABCBintangRamadhan25
 
Tutorial jquery Nur Kholifah
Tutorial  jquery Nur KholifahTutorial  jquery Nur Kholifah
Tutorial jquery Nur Kholifahnur_kholi
 
Tugas 1 0317 individu
Tugas 1 0317 individuTugas 1 0317 individu
Tugas 1 0317 individueko nofrianto
 
PENGENALAN CODEIGNITER
PENGENALAN CODEIGNITERPENGENALAN CODEIGNITER
PENGENALAN CODEIGNITERdenisabrian
 

What's hot (13)

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...
 
Dicoding Developer Coaching #33: Android | Depedency Injection dengan Dagger,...
Dicoding Developer Coaching #33: Android | Depedency Injection dengan Dagger,...Dicoding Developer Coaching #33: Android | Depedency Injection dengan Dagger,...
Dicoding Developer Coaching #33: Android | Depedency Injection dengan Dagger,...
 
ID Android Dev Talk - Observer Pattern, Event Bus Usage, Firebase & Geofire
ID Android Dev Talk  - Observer Pattern, Event Bus Usage, Firebase & GeofireID Android Dev Talk  - Observer Pattern, Event Bus Usage, Firebase & Geofire
ID Android Dev Talk - Observer Pattern, Event Bus Usage, Firebase & Geofire
 
Beginner's Guide to React & Redux Development
Beginner's Guide to React & Redux DevelopmentBeginner's Guide to React & Redux Development
Beginner's Guide to React & Redux Development
 
Rekayasa web
Rekayasa webRekayasa web
Rekayasa web
 
ActiveX - Plugin My Project
ActiveX - Plugin My ProjectActiveX - Plugin My Project
ActiveX - Plugin My Project
 
Tugas 1 0317
Tugas 1   0317Tugas 1   0317
Tugas 1 0317
 
Tugas 1 ihsan riadi - 1412511162
Tugas 1   ihsan riadi - 1412511162Tugas 1   ihsan riadi - 1412511162
Tugas 1 ihsan riadi - 1412511162
 
Pengenalan pemrograman android
Pengenalan pemrograman androidPengenalan pemrograman android
Pengenalan pemrograman android
 
Presensi SM Findout Project ABC
Presensi SM Findout Project ABCPresensi SM Findout Project ABC
Presensi SM Findout Project ABC
 
Tutorial jquery Nur Kholifah
Tutorial  jquery Nur KholifahTutorial  jquery Nur Kholifah
Tutorial jquery Nur Kholifah
 
Tugas 1 0317 individu
Tugas 1 0317 individuTugas 1 0317 individu
Tugas 1 0317 individu
 
PENGENALAN CODEIGNITER
PENGENALAN CODEIGNITERPENGENALAN CODEIGNITER
PENGENALAN CODEIGNITER
 

Similar to Dicoding Developer Coaching #23: Android | Membangun Modern App dengan Jetpack & Android Architecture Component

Tutorial web site aida dan jesika
Tutorial web site aida dan jesikaTutorial web site aida dan jesika
Tutorial web site aida dan jesikaRCH_98
 
GITS Class #11: Android Architecture Component bersama Derayan Bima (Android ...
GITS Class #11: Android Architecture Component bersama Derayan Bima (Android ...GITS Class #11: Android Architecture Component bersama Derayan Bima (Android ...
GITS Class #11: Android Architecture Component bersama Derayan Bima (Android ...GITS Indonesia
 
Material design for android (Diggest)
Material design for android (Diggest)Material design for android (Diggest)
Material design for android (Diggest)Google
 
Mulai melangkah dengan Node.js
Mulai melangkah dengan Node.jsMulai melangkah dengan Node.js
Mulai melangkah dengan Node.jsMohammad Anwari
 
Tugas 3 – 0317 (individu)
Tugas 3 – 0317 (individu)Tugas 3 – 0317 (individu)
Tugas 3 – 0317 (individu)Linda Lestari
 
Workshop SuBali - CodeIgniter
Workshop SuBali - CodeIgniterWorkshop SuBali - CodeIgniter
Workshop SuBali - CodeIgniterAdi Setiawan
 
2072 p1-spk-rekayasa perangkat lunak
2072 p1-spk-rekayasa perangkat lunak2072 p1-spk-rekayasa perangkat lunak
2072 p1-spk-rekayasa perangkat lunakWinarto Winartoap
 
Ekosistem Aplikasi Repositori Institusi
Ekosistem Aplikasi Repositori InstitusiEkosistem Aplikasi Repositori Institusi
Ekosistem Aplikasi Repositori InstitusiDwi Fajar Saputra
 
Panduan Praktikum Pemrograman Sistem Jaringan
Panduan Praktikum Pemrograman Sistem JaringanPanduan Praktikum Pemrograman Sistem Jaringan
Panduan Praktikum Pemrograman Sistem JaringanI Putu Hariyadi
 
Pengenalan Framework .NET
Pengenalan Framework .NETPengenalan Framework .NET
Pengenalan Framework .NETHelmy Satria
 
Pry open qiscus
Pry open qiscusPry open qiscus
Pry open qiscusQiscus
 
laporan aplikasi
laporan aplikasilaporan aplikasi
laporan aplikasiFitra Sani
 
Prospektif manajemen informatika dalam dunia kerja
Prospektif manajemen informatika dalam dunia kerjaProspektif manajemen informatika dalam dunia kerja
Prospektif manajemen informatika dalam dunia kerjaucienmapcu
 
PROPOSAL PROYEK REKACIPTA.pdf
PROPOSAL PROYEK REKACIPTA.pdfPROPOSAL PROYEK REKACIPTA.pdf
PROPOSAL PROYEK REKACIPTA.pdfZainal Arifin
 
Pengantar Android
Pengantar AndroidPengantar Android
Pengantar AndroidSherly Uda
 

Similar to Dicoding Developer Coaching #23: Android | Membangun Modern App dengan Jetpack & Android Architecture Component (20)

Tutorial web site aida dan jesika
Tutorial web site aida dan jesikaTutorial web site aida dan jesika
Tutorial web site aida dan jesika
 
GITS Class #11: Android Architecture Component bersama Derayan Bima (Android ...
GITS Class #11: Android Architecture Component bersama Derayan Bima (Android ...GITS Class #11: Android Architecture Component bersama Derayan Bima (Android ...
GITS Class #11: Android Architecture Component bersama Derayan Bima (Android ...
 
Material design for android (Diggest)
Material design for android (Diggest)Material design for android (Diggest)
Material design for android (Diggest)
 
Mulai melangkah dengan Node.js
Mulai melangkah dengan Node.jsMulai melangkah dengan Node.js
Mulai melangkah dengan Node.js
 
Tugas 3 – 0317 (individu)
Tugas 3 – 0317 (individu)Tugas 3 – 0317 (individu)
Tugas 3 – 0317 (individu)
 
Workshop SuBali - CodeIgniter
Workshop SuBali - CodeIgniterWorkshop SuBali - CodeIgniter
Workshop SuBali - CodeIgniter
 
SESI 3 FE.pptx
SESI 3 FE.pptxSESI 3 FE.pptx
SESI 3 FE.pptx
 
2072 p1-spk-rekayasa perangkat lunak
2072 p1-spk-rekayasa perangkat lunak2072 p1-spk-rekayasa perangkat lunak
2072 p1-spk-rekayasa perangkat lunak
 
Ekosistem Aplikasi Repositori Institusi
Ekosistem Aplikasi Repositori InstitusiEkosistem Aplikasi Repositori Institusi
Ekosistem Aplikasi Repositori Institusi
 
Panduan Praktikum Pemrograman Sistem Jaringan
Panduan Praktikum Pemrograman Sistem JaringanPanduan Praktikum Pemrograman Sistem Jaringan
Panduan Praktikum Pemrograman Sistem Jaringan
 
Pengenalan Framework .NET
Pengenalan Framework .NETPengenalan Framework .NET
Pengenalan Framework .NET
 
Pertemuan 1
Pertemuan 1Pertemuan 1
Pertemuan 1
 
Pry open qiscus
Pry open qiscusPry open qiscus
Pry open qiscus
 
One-gate Library Portal
One-gate Library PortalOne-gate Library Portal
One-gate Library Portal
 
Cover
CoverCover
Cover
 
Cover
CoverCover
Cover
 
laporan aplikasi
laporan aplikasilaporan aplikasi
laporan aplikasi
 
Prospektif manajemen informatika dalam dunia kerja
Prospektif manajemen informatika dalam dunia kerjaProspektif manajemen informatika dalam dunia kerja
Prospektif manajemen informatika dalam dunia kerja
 
PROPOSAL PROYEK REKACIPTA.pdf
PROPOSAL PROYEK REKACIPTA.pdfPROPOSAL PROYEK REKACIPTA.pdf
PROPOSAL PROYEK REKACIPTA.pdf
 
Pengantar Android
Pengantar AndroidPengantar Android
Pengantar Android
 

More from DicodingEvent

Developer Coaching #114.pdf
Developer Coaching #114.pdfDeveloper Coaching #114.pdf
Developer Coaching #114.pdfDicodingEvent
 
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 21DicodingEvent
 
Mengenalkan augmented reality (ar) pada snapchat
Mengenalkan augmented reality (ar) pada snapchatMengenalkan augmented reality (ar) pada snapchat
Mengenalkan augmented reality (ar) pada snapchatDicodingEvent
 
Membangun Aplikasi Serverless di Platfrom AWS
Membangun Aplikasi Serverless di Platfrom AWSMembangun Aplikasi Serverless di Platfrom AWS
Membangun Aplikasi Serverless di Platfrom AWSDicodingEvent
 
IDCamp X Madrasah: Pengenalan Computational Thinking
IDCamp X Madrasah: Pengenalan Computational ThinkingIDCamp X Madrasah: Pengenalan Computational Thinking
IDCamp X Madrasah: Pengenalan Computational ThinkingDicodingEvent
 
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 UnicornDicodingEvent
 
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 DevOpsDicodingEvent
 
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/CDDicodingEvent
 
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 RohmanDicodingEvent
 
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 depanDicodingEvent
 
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 101DicodingEvent
 
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 2021DicodingEvent
 
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 KurniadiDicodingEvent
 
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 BarusDicodingEvent
 
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 #32: Android | Reactive Programming dengan RxJava...
Dicoding Developer Coaching #32: Android | Reactive Programming dengan RxJava...Dicoding Developer Coaching #32: Android | Reactive Programming dengan RxJava...
Dicoding Developer Coaching #32: Android | Reactive Programming dengan RxJava...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 #32: Android | Reactive Programming dengan RxJava...
Dicoding Developer Coaching #32: Android | Reactive Programming dengan RxJava...Dicoding Developer Coaching #32: Android | Reactive Programming dengan RxJava...
Dicoding Developer Coaching #32: Android | Reactive Programming dengan RxJava...
 

Dicoding Developer Coaching #23: Android | Membangun Modern App dengan Jetpack & Android Architecture Component

  • 1. Membangun Modern App dengan Jetpack & Android Architecture Component Ahmad Arif Faizin Google Associate Android Developer, Curriculum Developer Dicoding
  • 2. Modern App Menggunakan teknologi terbaru Lebih mudah, lebih cepat, lebih happy Modern Android Development (MAD) Skills
  • 3.
  • 5. Android Jetpack? Kiri, Kanan, L1, L2, R1, R2, Atas, Bawah, Kiri, Kanan
  • 6.
  • 7. Android Jetpack is a suite of libraries to help developers follow best practices, reduce boilerplate code, and write code that works consistently across Android versions and devices so that developers can focus on the code they care about.
  • 9. "With Android Architecture Components, we're re-architecting our entire app. It's great to have a Google-endorsed, opinionated, and clean way to build an Android app that makes it easier to support configuration changes." Drew Hannay, Staff Software Engineer, LinkedIn
  • 10.
  • 11.
  • 12. Now... 85++ libraries Dibagi berdasarkan : ● Beyond phone ● Data ● Graphics ● Lifecycle ● Media ● Navigation ● Security ● Performance/Test ● UI
  • 14. AAC (Android Architecture Component) best practices and recommended architecture for building robust, production-quality apps
  • 15. Hindari short-term hack! ● Mendesain aplikasi hanya untuk perangkat tertentu saja ● Copy paste kode ke dalam file Anda secara membabi buta ● Menuliskan secara hardcode untuk string yang tampil ● Menempatkan semua business logic dalam file Activity
  • 16.
  • 17. Why you need good app architecture? ● Separation of Concern (SoC), memisahkan business logic dan ui logic. ● Memudahkan developer untuk saling berkolaborasi. ● Kode jadi lebih mudah dites. ● Menghemat waktu dan mengurangi technical debt saat project berkembang.
  • 19. Komponen AAC ● ViewModel - Handle data ke UI dan mengatasi configuration change ● LiveData - data holder yang lifecycle-aware dan bisa di-observe secara real-time untuk mendapatkan data terbaru ● Repository - untuk mengatur beberapa sumber data (network, database, cache) ● Room - abstraksi di atas SQLite, untuk simpan database dengan lebih simple dan mudah
  • 20. class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) ... //initiate TextView //get data from Webservice (DON’T!) val response = webservice.getUser(userId) //show data in TextView } } Sample of Bad Code
  • 21. class UserRepository constructor( private val webservice: Webservice, //network : retrofit private val userDao: UserDao //local data : room ) { suspend fun getUser(userId: String): User { val userExists = userDao.hasUser() //jika data local kosong, request network dan masukkan ke local if (!userExists) { val response = webservice.getUser(userId) userDao.save(response.body()) } return userDao.getUser(userId) } } Sample of Repository
  • 22. class UserProfileViewModel( userRepository: UserRepository ) : ViewModel() { private val _userId = MutableLiveData<String>() val userId: LiveData<String> = _userId fun setUserId(userId: String) { _userId.value = userId } val user = Transformations.switchMap(_userId) { id -> userRepository.getUser(id) } } Sample of ViewModel + LiveData
  • 23. class MainActivity : AppCompatActivity() { val viewModel: UserProfileViewModel by viewModels() override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) ... //initiate TextView viewModel.setUserId(userId) viewModel.user.observe(this, Observer<User> { //show data in TextView }) } } Sample of Good Code
  • 24. Best Practice ● Jangan jadikan activity, services, & broadcast sebagai sumber data. ● Buat batasan yang jelas antar modul. ● Expose sedikit mungkin data pada setiap modul. ● Pertimbangkan cara membuat setiap modul dapat diuji secara terpisah. ● Fokuslah pada inti aplikasi Anda supaya lebih bagus dari aplikasi lainnya. ● Sebisa mungkin simpan data yang relevan dan terbaru. ● Tetapkan satu sumber data sebagai single source of truth.