Selasa, 18 Juni 2024

desertClickApp

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".


6. Kompilasi dan jalankan aplikasi Dessert Clicker. Anda tidak melihat perbedaan perilaku dalam aplikasi saat Anda mengetuk dessert. Di Android Studio, di bagian bawah layar, klik tab Logcat.

7. Di jendela Logcat, ketik tag:MainActivity ke dalam kolom pencarian.


perilaku dalam aplikasi saat Anda mengetuk dessert. Di Android Studio, di bagian bawah layar, klik tab Logcat.

Langkah 2: 
Implementasikan metode onStart() Metode siklus hidup onStart() dipanggil tepat setelah onCreate(). Setelah onStart() dijalankan, aktivitas Anda terlihat di layar. Berbeda dengan onCreate() yang hanya dipanggil sekali untuk menginisialisasi aktivitas Anda, onStart() dapat dipanggil oleh sistem berkali-kali dalam siklus hidup aktivitas Anda. Perhatikan bahwa onStart() dipasangkan dengan metode siklus hidup onStop() yang sesuai. Jika pengguna memulai aplikasi Anda dan kemudian kembali ke layar beranda perangkat, aktivitas dihentikan dan tidak lagi terlihat di layar. 

  1. 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. 
  2. 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:
  3. override fun onStart() {
       
    super.onStart()
    }
  4. Di dalam metode onStart(), tambahkan pesan log:
  5. override fun onStart() {
       
    super.onStart()
       
    Log.d(TAG, "onStart Called")
    }
  6. Kompilasi dan jalankan aplikasi Dessert Clicker dan buka panel Logcat. 
  7. 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. 
  8. 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:54:48.721 5386-5386 MainActivity com.example.dessertclicker D onCreate Called 2024-04-26 14:54:48.756 5386-5386 MainActivity com.example.dessertclicker D onStart Called
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

  1. Compile dan Jalankan Aplikasi Anda: Pastikan emulator Android Anda berjalan dan aplikasi Anda sudah dikompilasi dan diinstal.
  2. Buka Logcat: Buka Android Studio dan navigasikan ke Logcat untuk memantau log yang dihasilkan oleh aplikasi Anda.
  3. Interaksi dengan Aplikasi: Klik kue cupcake beberapa kali untuk meningkatkan jumlah kue terjual dan total pendapatan. Catat nilai-nilai ini.
  4. Nonaktifkan Kunci Rotasi Layar: Pastikan kunci rotasi layar di emulator dinonaktifkan sehingga orientasi layar dapat berubah dengan bebas.
  5. 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:

Github: https://github.com/khalidjuna/desert-clickApp.git


Tidak ada komentar:

Posting Komentar

EAS-PPB I