Kali ini saya belajar aplikasi starter yang disebut Dessert Clicker. Dalam Dessert Clicker, setiap kali pengguna mengetuk sebuah dessert di layar, aplikasi akan "membeli" dessert tersebut untuk pengguna. Aplikasi ini memperbarui nilai-nilai dalam tata letak untuk:
- Jumlah dessert yang "dibeli"
- Total pendapatan untuk dessert yang "dibeli"
Kode awal untuk memulai program ini dapat di unduh melalui cara berikut:
buka terminal kemudian paste kode berikut:
git clone https://github.com/google-developer-training/basic-android-kotlin-compose-training-dessert-clicker/tree/starter
Branch name: starter
Setelah semuanya siap mari kita mulai.
Langkah 1:
Periksa metode onCreate() dan tambahkan logging
Untuk mengetahui apa yang terjadi dengan siklus hidup Android, berguna untuk mengetahui kapan berbagai metode siklus hidup dipanggil. Informasi ini membantu Anda mengidentifikasi di mana masalah terjadi dalam aplikasi Dessert Clicker.
Cara sederhana untuk menentukan informasi ini adalah dengan menggunakan fungsi logging Android. Logging memungkinkan Anda menulis pesan singkat ke konsol saat aplikasi berjalan dan menggunakannya untuk melihat kapan callback yang berbeda dipicu. \
1. Jalankan aplikasi Dessert Clicker dan ketuk beberapa kali pada gambar dessert. Perhatikan bagaimana nilai untuk Desserts sold dan total jumlah uang berubah.
2. Buka MainActivity.kt dan periksa metode onCreate() untuk aktivitas ini:
override fun onCreate(savedInstanceState: Bundle?) { // ...}
Dalam diagram siklus hidup aktivitas, Anda mungkin mengenali metode onCreate(), karena Anda telah menggunakan callback ini sebelumnya. Ini adalah satu-satunya metode yang harus diimplementasikan oleh setiap aktivitas. Metode onCreate() adalah tempat Anda harus melakukan inisialisasi satu kali untuk aktivitas Anda. Misalnya, dalam onCreate(), Anda memanggil setContent(), yang menentukan tata letak UI aktivitas.

Metode siklus hidup onCreate() dipanggil sekali, tepat setelah aktivitas diinisialisasi—ketika OS membuat objek Activity baru dalam memori.
3. Setelah onCreate() dieksekusi, aktivitas dianggap telah dibuat.
Tambahkan konstanta berikut di tingkat atas MainActivity.kt, di atas deklarasi kelas class MainActivity. Sebuah konvensi yang baik adalah mendeklarasikan konstanta TAG di file Anda karena nilainya tidak akan berubah. Untuk menandainya sebagai konstanta waktu kompilasi, gunakan const saat mendeklarasikan variabel. Konstanta waktu kompilasi adalah nilai yang diketahui selama kompilasi.
private const val TAG = "MainActivity"
4. Dalam metode onCreate(), tepat setelah panggilan ke super.onCreate(), tambahkan baris berikut:
Log.d(TAG, "onCreate Called")
5. Impor kelas Log jika perlu (tekan Alt+Enter, atau Option+Enter pada Mac, dan pilih Import.) Jika Anda mengaktifkan auto imports, ini akan terjadi secara otomatis.
import android.util.Log
Kelas Log menulis pesan ke Logcat. Logcat adalah konsol untuk mencatat pesan. Pesan dari Android tentang aplikasi Anda muncul di sini, termasuk pesan yang Anda kirim secara eksplisit ke log dengan metode Log.d() atau metode kelas Log lainnya.
Ada tiga aspek penting dari instruksi Log:
- Prioritas pesan log, yaitu seberapa penting pesan tersebut. Dalam hal ini, Log.v() mencatat pesan verbose. Metode Log.d() menulis pesan debug. Metode lain dalam kelas Log termasuk Log.i() untuk pesan informasi, Log.w() untuk peringatan, dan Log.e() untuk pesan kesalahan.
- Tag log (parameter pertama), dalam hal ini "MainActivity". Tag adalah string yang memungkinkan Anda lebih mudah menemukan pesan log Anda di Logcat. Tag biasanya adalah nama kelas.
- Pesan log aktual, disebut msg (parameter kedua), adalah string pendek, yang dalam hal ini adalah "onCreate Called".
- Di Android Studio, dengan MainActivity.kt terbuka dan kursor berada di dalam kelas MainActivity, pilih Code > Override Methods... atau tekan Control+O. Sebuah dialog akan muncul dengan daftar panjang semua metode yang dapat Anda override dalam kelas ini.
- Mulailah mengetik onStart untuk mencari metode yang benar. Untuk menggulir ke item yang cocok berikutnya, gunakan panah bawah. Pilih onStart() dari daftar dan klik OK untuk memasukkan kode boilerplate override. Kodenya akan terlihat seperti contoh berikut:
override fun onStart() {
super.onStart()
}- Di dalam metode onStart(), tambahkan pesan log:
override fun onStart() {
super.onStart()
Log.d(TAG, "onStart Called")
}- Kompilasi dan jalankan aplikasi Dessert Clicker dan buka panel Logcat.
- Ketik tag:MainActivity ke dalam kolom pencarian untuk memfilter log. Perhatikan bahwa metode onCreate() dan onStart() dipanggil satu demi satu, dan bahwa aktivitas Anda terlihat di layar.
- Tekan tombol Home pada perangkat dan kemudian gunakan layar Recents untuk kembali ke aktivitas. Perhatikan bahwa aktivitas dilanjutkan dari tempat terakhir, dengan semua nilai yang sama, dan bahwa onStart() dicatat untuk kedua kalinya ke Logcat. Perhatikan juga bahwa metode onCreate() tidak dipanggil lagi.
2024-04-26 14:55:41.674 5386-5386 MainActivity com.example.dessertclicker
Langkah 3:
Tambahkan lebih banyak pernyataan log
Dalam langkah ini, Anda mengimplementasikan logging untuk semua metode siklus hidup lainnya.
1. Override sisa metode siklus hidup di MainActivity Anda dan tambahkan pernyataan log untuk masing-masing, seperti yang ditunjukkan dalam kode berikut:
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")
}
Kompilasi dan jalankan kembali Dessert Clicker dan periksa Logcat.
Perhatikan bahwa kali ini, selain onCreate() dan onStart(), ada pesan log untuk callback siklus hidup onResume().
2024-04-26 14:56:48.684 5484-5484 MainActivity com.example.dessertclicker D onCreate Called
2024-04-26 14:56:48.709 5484-5484 MainActivity com.example.dessertclicker D onStart Called
2024-04-26 14:56:48.713 5484-5484 MainActivity com.example.dessertclicker
bagian bawah layar, klik tab Logcat. perilaku dalam aplikasi saat Anda mengetuk dessert. Di Android Studio, di bagian bawah layar, klik tab
onCreate()
ketihttps://github.com/khalidjuna/desert-clickApp.gitka sistem membuat aplikasi.onStart()
membuat aplikasi terlihat di layar, tetapi pengguna belum dapat berinteraksi dengannya.onResume()
membawa aplikasi ke latar depan, dan pengguna sekarang dapat berinteraksi dengannya.
Meskipun namanya onResume(), metode ini dipanggil saat startup, bahkan jika tidak ada yang perlu dilanjutkan.
Langkah 4:
Jelajahi Kasus Penggunaan Siklus Hidup
##Membuka dan Menutup Aktivitas
Anda memulai dengan kasus penggunaan paling dasar, yaitu memulai aplikasi Anda untuk pertama kali dan kemudian menutup aplikasi.
Langkah-langkah:
- Kompilasi dan jalankan aplikasi Dessert Clicker, jika belum berjalan.Seperti yang telah Anda lihat, callback onCreate(), onStart(), dan onResume() dipanggil saat aktivitas dimulai untuk pertama kali
2024-04-26 14:56:48.684 5484-5484 MainActivity com.example.dessertclicker D onCreate Called
2024-04-26 14:56:48.709 5484-5484 MainActivity com.example.dessertclicker D onStart Called
2024-04-26 14:56:48.713 5484-5484 MainActivity com.example.dessertclicker D onResume Called
- Ketuk cupcake beberapa kali.
- Tekan tombol Kembali pada perangkat.
- Perhatikan di Logcat bahwa onPause() dan onStop() dipanggil dalam urutan tersebut.
2024-04-26 14:58:19.984 5484-5484 MainActivity com.example.dessertclicker D onPause Called
2024-04-26 14:58:20.491 5484-5484 MainActivity com.example.dessertclicker D onStop Called
2024-04-26 14:58:20.517 5484-5484 MainActivity com.example.dessertclicker D onDestroy Called
Dalam kasus ini, menggunakan tombol Kembali menyebabkan aktivitas (dan aplikasi) dihapus dari layar dan dipindahkan ke bagian belakang tumpukan aktivitas.
Penjelasan:- Sistem operasi Android mungkin menutup aktivitas Anda jika kode Anda secara manual memanggil metode finish() aktivitas atau jika pengguna secara paksa keluar dari aplikasi. Misalnya, pengguna dapat memaksa keluar atau menutup aplikasi di layar Recents.
- Sistem operasi juga dapat mematikan aktivitas Anda sendiri jika aplikasi Anda tidak muncul di layar untuk waktu yang lama. Android melakukan ini untuk menghemat daya baterai dan untuk mengklaim kembali sumber daya yang digunakan aplikasi sehingga tersedia untuk aplikasi lain.
##Menavigasi Keluar dan Kembali ke Aktivitas
Setelah Anda memulai aplikasi dan menutupnya, Anda telah melihat sebagian besar status siklus hidup saat aktivitas dibuat untuk pertama kali. Anda juga telah melihat sebagian besar status siklus hidup yang dilalui aktivitas saat ditutup. Namun, pengguna Android sering berinteraksi dengan perangkat mereka dengan beralih antara aplikasi, kembali ke layar utama, memulai aplikasi baru, dan menangani gangguan dari aktivitas lain seperti panggilan telepon.
Aktivitas Anda tidak sepenuhnya ditutup setiap kali pengguna menavigasi dari aktivitas tersebut:Ketika aktivitas Anda tidak lagi terlihat di layar, status ini dikenal sebagai memasukkan aktivitas ke latar belakang. Kebalikannya adalah saat aktivitas berada di foreground, atau di layar.Ketika pengguna kembali ke aplikasi Anda, aktivitas yang sama dijalankan kembali dan menjadi terlihat lagi. Bagian dari siklus hidup ini disebut sebagai siklus hidup aplikasi yang terlihat.Dalam langkah ini, Anda akan melihat siklus hidup aktivitas ketika aplikasi masuk ke latar belakang dan kembali lagi ke foreground.
Langkah-langkah:
Dengan aplikasi Dessert Clicker berjalan, ketuk cupcake beberapa kali.Tekan tombol Beranda pada perangkat Anda dan amati Logcat di Android Studio. Kembali ke layar utama menjadikan aplikasi Anda masuk ke latar belakang, bukan menutup aplikasi sepenuhnya. Perhatikan bahwa metode onPause() dan onStop() dipanggil.
2024-04-26 15:00:04.905 5590-5590 MainActivity com.example.dessertclicker D onPause Called
2024-04-26 15:00:05.430 5590-5590 MainActivity com.example.dessertclicker D onStop Called
- Saat onPause() dipanggil, aplikasi tidak lagi fokus. Setelah onStop(), aplikasi tidak lagi terlihat di layar. Meskipun aktivitas dihentikan, objek Aktivitas masih ada di memori dalam latar belakang. Android OS tidak menghancurkan aktivitas tersebut. Pengguna mungkin kembali ke aplikasi, jadi Android tetap menyimpan sumber daya aktivitas Anda.
- Gunakan layar Terbaru untuk kembali ke aplikasi. Di emulator, layar Terbaru dapat diakses dengan tombol sistem persegi seperti yang ditunjukkan dalam gambar di atas.
- Perhatikan di Logcat bahwa aktivitas dijalankan kembali dengan onRestart() dan onStart(), dan kemudian dilanjutkan dengan onResume().
2024-04-26 15:00:39.371 5590-5590 MainActivity com.example.dessertclicker D onRestart Called
2024-04-26 15:00:39.372 5590-5590 MainActivity com.example.dessertclicker D onStart Called
2024-04-26 15:00:39.374 5590-5590 MainActivity com.example.dessertclicker D onResume Called
Ketika aktivitas kembali ke foreground, metode onCreate() tidak dipanggil lagi. Objek aktivitas tidak dihancurkan, sehingga tidak perlu dibuat ulang. Alih-alih onCreate(), metode onRestart() dipanggil. Perhatikan bahwa kali ini ketika aktivitas kembali ke foreground, nomor Desserts sold tetap ada.
- Buka setidaknya satu aplikasi selain Dessert Clicker sehingga perangkat memiliki beberapa aplikasi di layar Terbaru-nya.
- Buka aktivitas terbaru lainnya di layar Terbaru dan kembali ke aplikasi terbaru untuk membawa Dessert Clicker kembali ke foreground.
Perhatikan bahwa Anda melihat callback yang sama di Logcat seperti saat Anda menekan tombol Beranda. onPause() dan onStop() dipanggil saat aplikasi masuk ke latar belakang, dan kemudian onRestart(), onStart(), dan onResume() dipanggil saat kembali.
##Menyembunyikan Sebagian Aktivitas
Langkah-langkah:
- Dengan aplikasi Dessert Clicker berjalan, klik tombol Bagikan (Share) di kanan atas layar.
- Periksa Logcat dan perhatikan bahwa hanya onPause() yang dipanggil.
2024-04-26 15:01:49.535 5590-5590 MainActivity com.example.dessertclicker D onPause Called
Dalam kasus penggunaan ini, onStop() tidak dipanggil karena aktivitas masih sebagian terlihat. Namun, aktivitas tidak memiliki fokus pengguna, dan pengguna tidak dapat berinteraksi dengan aktivitas tersebut—aktivitas "bagikan" yang berada di foreground memiliki fokus pengguna.
Mengapa perbedaan ini penting? Interupsi dengan hanya onPause() biasanya berlangsung singkat sebelum kembali ke aktivitas Anda atau beralih ke aktivitas atau aplikasi lain. Umumnya Anda ingin tetap memperbarui UI agar bagian lain dari aplikasi Anda tidak tampak membeku.
Apa pun kode yang berjalan di onPause() memblokir hal lain dari tampil, jadi jaga agar kode di onPause() ringan. Misalnya, jika ada panggilan telepon masuk, kode di onPause() dapat menunda notifikasi panggilan masuk tersebut.
Klik di luar dialog bagikan untuk kembali ke aplikasi, dan perhatikan bahwa onResume() dipanggil.
Baik onResume() maupun onPause() berkaitan dengan fokus. Metode onResume() dipanggil saat aktivitas mendapatkan fokus, dan onPause() dipanggil saat aktivitas kehilangan fokus.
Dengan memahami perbedaan antara keterlihatan dan fokus dalam siklus hidup aktivitas Android, Anda dapat mengelola aplikasi Anda dengan lebih baik untuk memberikan pengalaman pengguna yang mulus dan responsif.
Langkah 5:
Menjelajahi Configuration Change
- Setelah Anda melihat efek dari rotasi layar yang menyebabkan panggilan siklus hidup aktivitas (onPause(), onStop(), onDestroy()), langkah-langkah berikutnya adalah memahami bagaimana memulihkan data setelah perubahan konfigurasi seperti rotasi layar:
- Memahami Perubahan Konfigurasi: Rotasi layar adalah salah satu contoh perubahan konfigurasi di Android yang menyebabkan aktivitas dihentikan dan direkonstruksi kembali. Hal ini mempengaruhi bagaimana siklus hidup aktivitas dipanggil.
- Pemantauan Logcat: Pastikan untuk memantau Logcat setelah rotasi layar untuk memahami urutan panggilan siklus hidup (onPause(), onStop(), onDestroy()).
2024-04-26 15:03:32.183 5716-5716 MainActivity com.example.dessertclicker D onPause Called
2024-04-26 15:03:32.185 5716-5716 MainActivity com.example.dessertclicker D onStop Called
2024-04-26 15:03:32.205 5716-5716 MainActivity com.example.dessertclicker D onDestroy Called
- Compile dan Jalankan Aplikasi Anda: Pastikan emulator Android Anda berjalan dan aplikasi Anda sudah dikompilasi dan diinstal.
- Buka Logcat: Buka Android Studio dan navigasikan ke Logcat untuk memantau log yang dihasilkan oleh aplikasi Anda.
- Interaksi dengan Aplikasi: Klik kue cupcake beberapa kali untuk meningkatkan jumlah kue terjual dan total pendapatan. Catat nilai-nilai ini.
- Nonaktifkan Kunci Rotasi Layar: Pastikan kunci rotasi layar di emulator dinonaktifkan sehingga orientasi layar dapat berubah dengan bebas.
- Putar Perangkat atau Emulator: Gunakan tombol rotasi (biasanya terletak di toolbar emulator) untuk memutar perangkat atau emulator ke mode lanskap.
2024-04-26 15:04:29.356 5809-5809 MainActivity com.example.dessertclicker D onCreate Called
2024-04-26 15:04:29.378 5809-5809 MainActivity com.example.dessertclicker D onStart Called
2024-04-26 15:04:29.382 5809-5809 MainActivity com.example.dessertclicker D onResume Called
2024-04-26 15:06:52.168 5809-5809 MainActivity com.example.dessertclicker D onPause Called
2024-04-26 15:06:52.183 5809-5809 MainActivity com.example.dessertclicker D onStop Called
2024-04-26 15:06:52.219 5809-5809 MainActivity com.example.dessertclicker D onDestroy Called
2024-04-26 15:06:52.302 5809-5809 MainActivity com.example.dessertclicker D onCreate Called
2024-04-26 15:06:52.308 5809-5809 MainActivity com.example.dessertclicker D onStart Called
2024-04-26 15:06:52.312 5809-5809 MainActivity com.example.dessertclicker D onResume Called
Selama proses ini, amati output Logcat untuk melihat urutan panggilan siklus hidup (onPause(), onStop(), onDestroy()) saat aktivitas menutup karena perubahan konfigurasi (rotasi layar).
Berikut adalah kode solusi:
Tidak ada komentar:
Posting Komentar