Back to IF3210 Pengembangan Aplikasi Piranti Bergerak

Activity Lifecycle States and Callbacks

Questions/Cues

  • Mengapa lifecycle Activity penting untuk kualitas aplikasi?
  • Apa enam state utama Activity dan kondisi masing-masing?
  • Kapan onPause() vs onStop() dipanggil?
  • Bagaimana cara menyimpan state UI saat terjadi perubahan konfigurasi?
  • Apa perbedaan onRestart() dan onCreate() dalam alur lifecycle?

Reference Points

  • IF3210 Pengembangan Aplikasi Piranti Bergerak (Slides 3-15)

Mengapa Lifecycle Activity Penting

Pemahaman lifecycle Activity merupakan fondasi pengembangan Android yang andal. Tanpa penanganan lifecycle yang benar, aplikasi dapat mengalami beberapa masalah kritis:

  • Kehilangan data pengguna saat pengguna meninggalkan aplikasi sementara (misalnya menerima telepon) lalu kembali
  • Crash saat rotasi layar karena sistem menghancurkan dan membuat ulang Activity
  • Memory leak jika resource tidak dilepas saat Activity tidak lagi terlihat

Sistem Android memiliki otoritas penuh untuk menghancurkan proses aplikasi demi kebutuhan resource, sehingga pengembang harus mengantisipasi semua transisi state yang mungkin terjadi.

State Activity dan Transisi

Activity melewati enam state yang berbeda sepanjang masa hidupnya. Sistem memanggil callback tertentu saat bertransisi antar state:

flowchart TD
    A([Activity Launched]) --> B[onCreate]
    B --> C[onStart]
    C --> D[onResume]
    D --> E([Activity Running])
    E --> F[onPause]
    F --> G[onStop]
    G --> H[onDestroy]
    H --> I([Activity Shut Down])
    G --> J[onRestart]
    J --> C
StateCallbackKondisi Activity
CREATEDonCreate()Sedang diinisialisasi
STARTEDonStart()Terlihat oleh pengguna
RESUMEDonResume()Memiliki input focus, aktif berinteraksi
PAUSEDonPause()Tidak memiliki input focus, masih terlihat
STOPPEDonStop()Tidak lagi terlihat
DESTROYEDonDestroy()Dihancurkan

Detail Setiap Callback Lifecycle

onCreate() adalah satu-satunya callback yang wajib diimplementasikan. Di sinilah Activity menginflate layout UI, menginisialisasi variabel, dan menjalankan logika startup awal. Callback ini selalu dipanggil pertama kali saat Activity dibuat.

onStart() dipanggil saat Activity mulai terlihat oleh pengguna. Dapat dipanggil setelah onCreate() (pertama kali) atau setelah onRestart(). Di sini biasanya dilakukan registrasi listener yang terkait visibilitas.

onRestart() dipanggil ketika Activity yang sebelumnya berada di state STOPPED akan dimulai kembali (misalnya pengguna kembali ke aplikasi setelah sempat membuka aplikasi lain). Callback ini segera diikuti oleh onStart().

onResume() dipanggil saat Activity mendapatkan input focus dan pengguna dapat mulai berinteraksi. Activity akan terus berada di state RESUMED sampai sistem memicunya berpindah ke PAUSED, misalnya saat dialog muncul di atas Activity.

onPause() adalah kebalikan dari onResume(). Dipanggil saat Activity kehilangan focus tetapi masih terlihat sebagian (misalnya ada dialog transparan di depannya). Operasi di sini harus sangat ringan karena waktu eksekusi yang lambat dapat mempengaruhi transisi ke Activity berikutnya.

onStop() dipanggil saat Activity tidak lagi terlihat sama sekali. Di sinilah sebaiknya resource yang tidak dibutuhkan dibebaskan dan data persisten (yang sedang diedit pengguna) disimpan agar tidak hilang.

onDestroy() adalah callback terakhir sebelum Activity dihancurkan. Ini dapat terjadi karena Activity selesai atau karena perubahan konfigurasi (seperti rotasi layar). Jangan mengandalkan onDestroy() untuk menyimpan data pengguna — lakukan itu di onStop().

Menyimpan State dengan Bundle

Saat terjadi perubahan konfigurasi (rotasi layar) atau sistem menghentikan aplikasi di background, Activity dihancurkan dan dibuat ulang. Pengguna mengharapkan state UI tetap sama setelah ini. Android menyediakan mekanisme Bundle untuk menyimpan state sementara:

  • Gunakan onSaveInstanceState(outState: Bundle) untuk menyimpan data state ke Bundle sebelum Activity dihancurkan
  • onCreate() menerima Bundle yang sama sebagai argumen saat Activity dibuat kembali
  • Data yang cocok disimpan di Bundle: nilai form input, posisi scroll, tab yang dipilih — bukan data besar seperti gambar (gunakan ViewModel untuk itu)

Summary

Activity lifecycle mengelola transisi antara enam state: CREATED, STARTED, RESUMED, PAUSED, STOPPED, dan DESTROYED, masing-masing dipicu oleh callback spesifik. onCreate() wajib diimplementasikan untuk inisialisasi UI; onPause() untuk operasi ringan saat kehilangan focus; onStop() untuk melepas resource dan menyimpan data persisten. Perubahan konfigurasi seperti rotasi layar menghancurkan dan membuat ulang Activity, sehingga state UI harus disimpan via onSaveInstanceState() menggunakan Bundle agar dapat dipulihkan di onCreate().