Tugas 7 PPB - B
Nama : Tsabita Putri Ramadhany
NRP : 5025211130
Kelas : PPB - B
Tugas 7
Activity dan Intent
Tugas : Menerapkan activity dan intent
Petunjuk Tugas : https://kuliahppb.blogspot.com/2024/05/activity-dan-intent.html
Pendahuluan
Sebagai latihan, kami diminta menjalankan aplikasi Dessert Clicker untuk mempelajari metode siklus proses Activity dan Intent. Dalam aplikasi ini, setiap kali pengguna mengetuk gambar makanan penutup di layar, aplikasi akan "membeli" makanan penutup untuk pengguna dan mengupdate jumlah makanan penutup yang "dibeli" serta total pendapatan.
Aplikasi ini memiliki beberapa bug terkait dengan siklus proses Android. Misalnya, dalam kondisi tertentu, aplikasi mereset nilai makanan penutup menjadi 0. Memahami siklus proses Android membantu kita menemukan penyebab masalah ini dan cara memperbaikinya. Untuk menjalankan aplikasi Dessert Clicker, langkah pertama adalah mengunduh proyek dari GitHub, mengekstrak file zip, dan membukanya di Android Studio.
Mempelajari Metode Siklus Proses dan Menambahkan Logging Dasar
Untuk memahami aktivitas siklus proses Android, penting untuk mengetahui kapan berbagai metode siklus proses dipanggil. Informasi ini membantu kita mengidentifikasi masalah yang terjadi di aplikasi Dessert Clicker. Salah satu cara mudah untuk menentukan informasi ini adalah dengan menggunakan fungsi logging Android. Logging memungkinkan kita menulis pesan singkat ke konsol saat aplikasi berjalan, membantu kita melihat kapan callback yang berbeda dipicu. Langkah yang bisa dilakukan adalah memodifikasi file MainActivity.kt dan meng-override metode dari setiap siklus Activity.
Perubahan ini dapat dilihat pada kode berikut:
// Tag for logging
private const val TAG = "MainActivity"
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
enableEdgeToEdge()
super.onCreate(savedInstanceState)
Log.d(TAG, "onCreate Called")
setContent {
DessertClickerTheme {
Surface(
modifier = Modifier
.fillMaxSize()
.statusBarsPadding(),
) {
DessertClickerApp(desserts = Datasource.dessertList)
}
}
}
}
override fun onStart() {
super.onStart()
Log.d(TAG, "onStart Called")
}
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")
}
}
Kelas Log menulis pesan ke Logcat. Logcat adalah konsol untuk mencatat pesan. Pesan dari Android tentang aplikasi Anda akan muncul di sini, termasuk pesan yang Anda kirim ke log dengan metode Log.d() atau metode kelas Log lainnya. Ada tiga aspek penting dari instruksi Log:
- Prioritas pesan log: Seberapa penting pesan tersebut. Metode Log.d() menulis pesan debug. Metode lain mencakup Log.i() untuk pesan informasi, Log.w() untuk peringatan, dan Log.e() untuk pesan error.
- Tag log: Parameter pertama, dalam hal ini adalah "MainActivity". Tag adalah string yang memungkinkan Anda menemukan pesan log dengan lebih mudah di Logcat. Biasanya berupa nama kelas.
- Pesan log: Parameter kedua, adalah string pendek, misalnya "onCreate Called".
Menjalankan Aplikasi dan Memeriksa Logcat
Langkah selanjutnya adalah menjalankan aplikasi Dessert Clicker dan memeriksa log di Logcat.
Perhatikan bahwa selain onCreate() dan onStart(), ada juga log untuk callback siklus proses 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 dapat berinteraksi dengannya.
Mempelajari Kasus Penggunaan Siklus Proses
Kasus Penggunaan 1: Membuka dan Menutup Aktivitas
Kita mulai dengan kasus penggunaan dasar, yaitu memulai aplikasi untuk pertama kali lalu menutupnya.
Saat aplikasi pertama kali dimulai, callback onCreate(), onStart(), dan onResume() dipanggil. Ketuk cupcake beberapa kali, lalu tekan tombol Kembali pada perangkat. Perhatikan di Logcat bahwa onPause() dan onStop() dipanggil dalam urutan tersebut.
Menggunakan tombol Kembali akan menyebabkan aktivitas dan aplikasi dihapus dari layar dan dipindahkan ke bagian belakang tumpukan aktivitas. Sistem Android mungkin menutup aktivitas jika kode memanggil metode finish() atau jika pengguna menutup aplikasi secara paksa.
Kasus Penggunaan 2: Navigasi dari dan Kembali ke Aktivitas
Kasus ini menunjukkan siklus proses saat aplikasi dipindahkan ke latar belakang dan kembali ke latar depan. Saat aplikasi berjalan, klik cupcake beberapa kali. Tekan tombol Layar Utama pada perangkat dan amati Logcat. Aplikasi tetap berjalan di latar belakang, dan onPause() serta onStop() dipanggil.
Saat onPause() dipanggil, aplikasi tidak lagi memiliki fokus. Setelah onStop(), aplikasi tidak lagi terlihat di layar tetapi masih ada di memori. Pengguna mungkin kembali ke aplikasi. Ketika aplikasi dibuka kembali, callback onRestart(), onStart(), dan onResume() dipanggil.
Kasus Penggunaan 3: Menyembunyikan Sebagian Aktivitas
Dalam kasus ini, aplikasi tetap sebagian terlihat di layar tetapi tidak memiliki fokus pengguna. Dengan aplikasi Dessert Clicker berjalan, klik tombol Bagikan di kanan atas layar. Aktivitas berbagi muncul di paruh bawah layar, dan aktivitas Dessert Clicker masih terlihat di paruh atas. Logcat menunjukkan bahwa hanya onPause() yang dipanggil.
Aktivitas yang sebagian terlihat tetapi tidak memiliki fokus pengguna tetap ada di memori. Klik di luar dialog berbagi untuk kembali ke aplikasi, dan perhatikan bahwa onResume() dipanggil.
Mempelajari Perubahan Konfigurasi
Perubahan konfigurasi terjadi saat status perangkat berubah drastis, menyebabkan sistem menghentikan dan membangun ulang aktivitas. Misalnya, perubahan bahasa perangkat atau rotasi layar dari mode potret ke lanskap.
Rotasi layar adalah salah satu perubahan konfigurasi yang menyebabkan aktivitas dihentikan dan dimulai ulang. Kompilasikan dan jalankan aplikasi, klik cupcake beberapa kali, lalu putar perangkat ke mode lanskap. Logcat menunjukkan bahwa semua callback siklus proses dipanggil ulang saat aktivitas dibuat ulang.
Saat status aplikasi berubah, rekomposisi dijadwalkan. Rekomposisi adalah saat Compose mengeksekusi fungsi composable yang statusnya berubah, memperbarui UI. Untuk mempertahankan status selama perubahan konfigurasi, gunakan rememberSaveable.
Modifikasi composable DessertClickerApp di MainActivity.kt untuk menggunakan rememberSaveable:
@Composable
fun DessertClickerApp() {
var revenue by rememberSaveable { mutableStateOf(0) }
var dessertsSold by rememberSaveable { mutableStateOf(0) }
// ...
}
Memahami Implementasi Logging dengan Logcat
Untuk memahami lebih dalam tentang siklus hidup Activity, mari kita lihat bagaimana setiap callback dipanggil dan bagaimana logging digunakan untuk melacaknya.
Contoh Kode Logging
Setiap metode siklus hidup Activity di-overridden dan ditambahkan logging menggunakan Log.d() untuk mencatat saat metode tersebut dipanggil. Berikut adalah rincian metode dan tujuannya:
onCreate():
- Metode ini dipanggil saat Activity pertama kali dibuat.
- Di sini, kita bisa melakukan inisialisasi dasar dan mempersiapkan UI.
Log.d(TAG, "onCreate Called")
mencatat bahwa onCreate() telah dipanggil.
onStart():
- Metode ini dipanggil saat Activity menjadi terlihat oleh pengguna.
Log.d(TAG, "onStart Called")
mencatat bahwa onStart() telah dipanggil.
onResume():
- Metode ini dipanggil saat Activity mulai berinteraksi dengan pengguna.
Log.d(TAG, "onResume Called")
mencatat bahwa onResume() telah dipanggil.
onRestart():
- Metode ini dipanggil saat Activity kembali ke layar setelah sebelumnya dihentikan.
Log.d(TAG, "onRestart Called")
mencatat bahwa onRestart() telah dipanggil.
onPause():
- Metode ini dipanggil saat Activity kehilangan fokus tetapi masih terlihat sebagian.
Log.d(TAG, "onPause Called")
mencatat bahwa onPause() telah dipanggil.
onStop():
- Metode ini dipanggil saat Activity tidak lagi terlihat oleh pengguna.
Log.d(TAG, "onStop Called")
mencatat bahwa onStop() telah dipanggil.
onDestroy():
- Metode ini dipanggil saat Activity akan dihancurkan.
Log.d(TAG, "onDestroy Called")
mencatat bahwa onDestroy() telah dipanggil.
Dengan menggunakan logging, kita dapat melacak kapan setiap metode dipanggil selama siklus hidup Activity. Ini sangat berguna untuk debugging dan memahami bagaimana aplikasi berperilaku dalam berbagai kondisi.
Kesimpulan
Memahami siklus hidup Activity dan menggunakan logging untuk melacaknya adalah keterampilan penting dalam pengembangan aplikasi Android. Dengan memodifikasi aplikasi Dessert Clicker dan menambahkan logging, kita dapat mengidentifikasi dan memperbaiki masalah terkait siklus hidup Activity. Penggunaan rememberSaveable untuk mempertahankan status selama perubahan konfigurasi memastikan bahwa aplikasi berperilaku dengan benar bahkan saat terjadi perubahan status perangkat. Dengan pendekatan ini, kita dapat meningkatkan keandalan dan kinerja aplikasi Android secara keseluruhan.
Komentar
Posting Komentar