Tugas 10: Memahami Siklus Proses Aktivitas di Android melalui Aplikasi Dessert Clicker
Nama : Helsa Nesta Dhaifullah
NRP : 5025201005Kelas : PPB I - 2024
Tentang Siklus Aktivitas
Apakah kalian tahu tentang siklus aktivitas dalam pengembangan Android? Saat
aplikasi aktif, aktivitas berpindah-pindah dan bisa kembali ke berbagai
status. Di Android, aktivitas adalah titik awal interaksi dengan pengguna.
Siklus hidup aktivitas mencakup mulai dari pembuatan hingga penghancuran, di
mana sistem mengambil kembali sumber daya. Penting bagi pengembang untuk
memahami siklus hidup aktivitas agar aplikasi responsif dan efisien.
Ringkasan Aplikasi
Dalam tutorial kali ini, kalian akan menggunakan aplikasi awal yang disebut
Dessert Clicker. Di Dessert Clicker, setiap kali kalian mengetuk makanan
penutup di layar, aplikasi akan "membeli" makanan penutup untuk kalian.
Aplikasi mengupdate nilai dalam tata letak untuk:
- Jumlah makanan penutup yang "dibeli"
- Total pendapatan untuk makanan penutup "yang dibeli"
Pratinjau Aplikasi Dessert Clicker |
Aplikasi ini berisi beberapa bug yang terkait dengan siklus proses Android. Misalnya, dalam keadaan tertentu, aplikasi mereset nilai makanan penutup ke 0. Memahami siklus proses Android akan membantu kalian memahami penyebab terjadinya masalah ini, serta cara memperbaikinya.
Sebelum masuk ke tutorial, kalian dapat mendownload kode awal yang akan kita
gunakan untuk membuka aplikasi Dessert Clicker.
Download Zip Kode Awal
Belajar Metode Siklus Proses dengan Logging Dasar
Siklus aktivitas melibatkan status yang dilewati dari awal hingga
penghancuran, dengan titik awal biasanya adalah metode main(). Untuk
aktivitas Android, titik awalnya adalah onCreate(). Pada perubahan status,
callback siklus aktivitas dipanggil untuk memungkinkan perubahan perilaku.
Android menyediakan serangkaian callback yang dapat diganti untuk merespons
perubahan status, memungkinkan penyesuaian perilaku aktivitas. Mengetahui
kapan dan bagaimana callback dipanggil penting, meskipun dapat
membingungkan. Dalam tutorial ini, tujuannya adalah memahami siklus
aktivitas dan penggunaan callback dengan logging.
Siklus Proses Aktivitas Android |
Periksa metode onCreate() dan tambahkan logging
Kalian pasti familiar dengan metode onCreate() dari siklus aktivitas karena
sering menggunakannya sebelumnya; ini wajib dalam setiap aktivitas. Di
onCreate(), kalian bisa melakukan inisialisasi aktivitas, seperti memanggil
setContent() untuk menetapkan tata letak UI. Method onCreate() dipanggil
sekali oleh sistem operasi setelah inisialisasi aktivitas, menandai
pembuatan objek Activity baru di memori.
- Jalankan aplikasi Dessert Clicker, lalu ketuk gambar makanan penutup beberapa kali. Perhatikan perubahan nilai dari Makanan penutup yang terjual dan jumlah total uang dalam dolar.
- Buka MainActivity.kt dan periksa metode onCreate().
- Tambahkan konstanta berikut di tingkat teratas MainActivity.kt, di atas deklarasi class class MainActivity.
-
Dalam metode onCreate(), tepat setelah panggilan ke
super.onCreate(), tambahkan baris berikut serta jangan lupa untuk
impor Log.
import android.util.Log ... Log.d(TAG, "onCreate Called")
Instruksi Log memiliki tiga aspek penting:📌 Prioritas Pesan: Log.v() untuk pesan panjang, Log.d() untuk debug, Log.i() untuk informasi, Log.w() untuk peringatan, dan Log.e() untuk error.📌 Log Tag: Parameter pertama, sering kali nama class, membantu identifikasi pesan.
📌 Log Pesan: Parameter kedua, berisi pesan yang akan dicatat.
Format Class Log - Kompilasi dan jalankan aplikasi Dessert Clicker. Di bagian bawah layar Android Studio, klik tab Logcat.
-
Di jendela Logcat, ketik tag:MainActivity pada kolom
penelusuran.
Hasil Logcat untuk Pemanggilan Metode onCreate()
private const val TAG = "MainActivity"
Terapkan Metode onStart()
Metode siklus proses onStart() dipanggil setelah onCreate(),
menandai saat aktivitas menjadi terlihat di layar. Berbeda dengan
onCreate() yang hanya terjadi sekali, onStart() dapat
dipanggil berkali-kali. Perlu diperhatikan bahwa
onStart() berhubungan erat dengan onStop(), di mana saat
pengguna meninggalkan aplikasi, aktivitas akan dihentikan dan tidak terlihat
lagi di layar.
-
Di Android Studio, dengan MainActivity.kt terbuka dan kursor ada
di dalam class MainActivity, pilih
Code > Override Methods... atau tekan Control+O. Dialog
akan muncul dan menampilkan daftar panjang berisi semua metode yang
dapat Anda ganti di class ini.
Pilihan Override/Implement dari Class MainActivity - Pilih onStart() dari daftar, lalu klik OK untuk menyisipkan kode pengganti boilerplate. Kode terlihat seperti contoh berikut:
- Di dalam metode onStart(), tambahkan pesan log:
- Kompilasi dan jalankan aplikasi Dessert Clicker, dan buka panel Logcat.
- Ketikkan tag:MainActivity di kolom penelusuran untuk memfilter log. Perhatikan bahwa metode onCreate() dan onStart() dipanggil satu demi satu, dan aktivitas Anda akan terlihat di layar.
-
Tekan tombol Layar Utama di perangkat, lalu gunakan layar Terbaru untuk
kembali ke aktivitas. Perhatikan bahwa aktivitas dilanjutkan dari tempat
terakhirnya, dengan semua nilai yang sama, dan onStart() dicatat
dalam log untuk kedua kalinya di Logcat. Perhatikan juga bahwa metode
onCreate() tidak dipanggil lagi.
Hasil Logcat untuk Pemanggilan Metode onStart()
override fun onStart() { super.onStart() }
override fun onStart() { super.onStart() Log.d(TAG, "onStart Called") }
Menambahkan laporan log lainnya
- Ganti sisa metode siklus proses di MainActivity Anda dan tambahkan laporan log untuk setiap metode, seperti yang ditunjukkan dalam kode berikut:
-
Kompilasi dan jalankan lagi aplikasi Dessert Clicker dan periksa
Logcat.
Perhatikan bahwa kali ini, selain onCreate() dan onStart(), ada pesan log untuk callback siklus proses onResume().
Hasil Logcat untuk Pemanggilan Metode onStart() dan onResume()
Saat aktivitas dimulai dari awal, Anda akan melihat ketiga callback siklus proses ini dipanggil secara berurutan:
📌 onCreate() saat sistem membuat aplikasi.
📌 onStart() membuat aplikasi terlihat di layar, tetapi pengguna belum dapat berinteraksi dengan aplikasi.
📌 onResume() membawa aplikasi ke latar depan, dan pengguna kini dapat berinteraksi dengannya.
override fun onResume() { super.onResume() Log.d(TAG, "onResume Called") } override fun onRestart() { super.onRestart() Log.d(TAG, "onRestart Called") } override fun onPause() { super.onPause() Log.d(TAG, "onPause Called") } override fun onStop() { super.onStop() Log.d(TAG, "onStop Called") } override fun onDestroy() { super.onDestroy() Log.d(TAG, "onDestroy Called") }
Mempelajari kasus penggunaan siklus proses
Kasus penggunaan 1: Membuka dan menutup aktivitas
Kita mulai dengan kasus penggunaan yang paling dasar, yaitu saat
kalian membuka aplikasi untuk pertama kalinya dan kemudian menutupnya.
- Kompilasi dan jalankan aplikasi Dessert Clicker jika belum berjalan. Seperti yang Anda lihat, callback onCreate(), onStart(), dan onResume() dipanggil saat aktivitas dimulai pertama kali.
- Ketuk cupcake beberapa kali.
-
Ketuk tombol Kembali yang ada di perangkat.
Perhatikan dalam Logcat bahwa onPause() dan onStop() dipanggil dalam urutan tersebut. Dalam hal ini, menggunakan tombol Kembali akan menyebabkan aktivitas (dan aplikasi) dihapus dari layar dan dipindahkan ke bagian belakang tumpukan aktivitas.
Hasil Logcat untuk Pemanggilan Metode onPause() dan onStop()
Kasus penggunaan 2: Bernavigasi dari dan kembali ke aktivitas
Setelah membuka dan menutup aplikasi, kalian telah melihat sebagian
besar status siklus proses saat aktivitas dibuat dan ditutup. Saat
pengguna berinteraksi dengan perangkat Android, aktivitas dapat
dipindahkan ke latar belakang atau berada di latar depan saat terlihat
di layar. Saat kembali ke aplikasi, aktivitas akan dimulai ulang, yang
merupakan bagian dari siklus proses aplikasi yang terlihat. Untuk
mengoptimalkan penggunaan sumber daya dan masa pakai baterai, Anda
dapat menggunakan siklus proses Activity dan callback untuk mengatur
operasi yang sedang berlangsung saat aplikasi berpindah antara latar
belakang dan latar depan.
- Saat aplikasi Dessert Clicker sedang berjalan, klik cupcake beberapa kali.
-
Tekan tombol Layar Utama di perangkat dan amati
Logcat di Android Studio. Saat Anda kembali ke layar utama,
aplikasi tersebut tidak akan dimatikan, tetapi akan tetap berjalan
di latar belakang. Perhatikan bahwa metode onPause() dan
onStop() dipanggil.
Hasil Logcat untuk Kasus Menutup Aplikasi dengan Kembali ke Layar Utama
-
Gunakan layar Terbaru untuk kembali ke aplikasi seperti
gambar di bawah.
Pratinjau Layar Terbaru saat Aplikasi Belum Ditutup Hasil Logcat untuk Kasus Kembali Masuk ke Aplikasi dari Layar Utama
Kasus penggunaan 3: Menyembunyikan sebagian aktivitas
Saat aplikasi berpindah ke latar belakang, fokus akan hilang setelah
onPause(), dan aplikasi tidak lagi terlihat setelah
onStop(). Perbedaan antara fokus dan visibilitas itu penting.
Ada kemungkinan aktivitas terlihat sebagian di layar, tetapi tidak
memiliki fokus pengguna. Pada langkah ini, Anda melihat satu kasus
saat aktivitas terlihat sebagian, tetapi tidak memiliki fokus
pengguna.
-
Dengan aplikasi Dessert Clicker masih berjalan, klik tombol Bagikan
di kanan atas layar.
Pratinjau Aplikasi saat Button "Bagikan" Ditekan
-
Periksa Logcat dan perhatikan bahwa hanya
onPause() yang dipanggil.
Hasil Logcat untuk Kasus Aplikasi Terlihat di Layar Namun Kehilangan Fokus Pengguna
- Klik di luar dialog berbagi untuk kembali ke aplikasi, dan perhatikan bahwa onResume() dipanggil.
Mempelajari perubahan konfigurasi
Perubahan konfigurasi menyebabkan onDestroy() dipanggil
Rotasi layar adalah salah satu jenis perubahan konfigurasi yang
menyebabkan aktivitas dihentikan dan dimulai ulang. Untuk menyimulasikan
perubahan konfigurasi ini dan memeriksa efeknya, selesaikan
langkah-langkah berikut:
- Kompilasikan dan jalankan aplikasi Anda.
- Pastikan kunci rotasi layar di emulator dinonaktifkan.
- Putar perangkat atau emulator ke mode lanskap. Anda dapat memutar emulator ke kiri atau kanan menggunakan tombol rotasi.
-
Periksa Logcat dan pahami bahwa saat dihentikan, aktivitas
akan memanggil onPause(), onStop(), dan
onDestroy(), dalam urutan tersebut.
Hasil Logcat untuk Kasus Perubahan Konfigurasi (Rotasi Layar)
Kehilangan data di rotasi perangkat
- Kompilasi dan jalankan aplikasi Anda, lalu buka Logcat.
- Klik cupcake beberapa kali dan perhatikan bahwa makanan penutup terjual dan total pendapatan tidak nol.
- Pastikan kunci rotasi layar di emulator dinonaktifkan.
- Putar perangkat atau emulator ke mode lanskap. Anda dapat memutar emulator ke kiri atau kanan menggunakan tombol rotasi.
-
Periksa output di Logcat.
Hasil Logcat untuk Kasus Kehilangan Data Akibat Perubahan Konfigurasi (Rotasi Layar)
Menggunakan rememberSaveable untuk menyimpan nilai di seluruh perubahan konfigurasi
Kalian menggunakan rememberSaveable untuk menyimpan nilai
yang diperlukan jika Android OS menghancurkan dan membuat ulang
aktivitas. Untuk menyimpan nilai selama rekomposisi, kalian perlu
menggunakan remember. Gunakan rememberSaveable untuk
menyimpan nilai selama rekomposisi dan perubahan konfigurasi.
-
Di MainActivity, update grup yang terdiri dari lima
variabel yang saat ini menggunakan remember untuk
rememberSaveable.
Potongan Kode Hasil Perubahan "Remember" dengan "RememberSaveable"
- Kompilasikan dan jalankan aplikasi Anda.
- Klik cupcake beberapa kali dan perhatikan bahwa makanan penutup terjual dan total pendapatan tidak nol.
- Putar perangkat atau emulator ke mode lanskap.
- Perhatikan bahwa setelah aktivitas dihancurkan dan dibuat ulang, gambar makanan penutup, makanan penutup yang terjual, dan total pendapatan dipulihkan ke nilai sebelumnya.
Mendapatkan Kode Solusi
Untuk melihat kode secara lebih lengkap dan jelas, Anda dapat
menggunakan perintah git ini:
$ git clone https://github.com/helsanesta/DessertClicker-AndroidApp.git
Atau,kalian dapat mengunjungi link github berikut.
Komentar
Posting Komentar