Back to IF3210 Pengembangan Aplikasi Piranti Bergerak

Lifecycle-aware Components

Questions/Cues

  • Apa masalah yang dipecahkan oleh lifecycle-aware components?
  • Apa perbedaan Lifecycle, LifecycleOwner, dan LifecycleObserver?
  • Bagaimana cara membuat komponen yang merespons perubahan lifecycle?
  • Mengapa Fragment dan AppCompatActivity disebut implementasi LifecycleOwner?
  • Kapan sebaiknya menggunakan LifecycleObserver dibanding override callback langsung?

Reference Points

  • IF3210 Pengembangan Aplikasi Piranti Bergerak (Slides 28-31)

Masalah yang Dipecahkan

Sebelum adanya lifecycle-aware components, kode yang bergantung pada lifecycle Activity/Fragment biasanya ditulis langsung di dalam callback seperti onStart() atau onStop(). Pendekatan ini memiliki masalah:

  • God class: Activity/Fragment menjadi sangat besar karena menangani logika dari banyak komponen sekaligus
  • Duplikasi: Kode setup/teardown diulang di setiap Activity yang menggunakan komponen yang sama
  • Rawan bug: Mudah lupa memanggil cleanup di callback yang tepat, menyebabkan memory leak

Lifecycle-aware components dari library androidx.lifecycle memungkinkan komponen untuk mengamati dan merespons lifecycle sendiri, tanpa Activity/Fragment perlu tahu detail tentang mereka.

Kelas Lifecycle

Kelas Lifecycle (dari androidx.lifecycle) bertanggung jawab untuk:

  • Menyimpan state lifecycle saat ini — misalnya RESUMED atau STOPPED
  • Mendispatch lifecycle events saat terjadi perubahan state — misalnya event ON_RESUME atau ON_STOP

State dan event Lifecycle menggunakan enum yang terdefinisi di dalam kelas ini. Activity atau Fragment yang mengelola lifecycle-nya melalui kelas ini disebut LifecycleOwner.

LifecycleOwner dan LifecycleObserver

flowchart TD
    LO["LifecycleOwner\n(Fragment / AppCompatActivity)"]
    L["Lifecycle\n(state + events)"]
    OB["LifecycleObserver\n(komponen kustom)"]
    LO -->|"getLifecycle()"| L
    L -->|"addObserver()"| OB
    L -->|"dispatches events"| OB

LifecycleOwner adalah interface yang menandakan bahwa suatu kelas memiliki lifecycle Android. Wajib mengimplementasikan satu metode: getLifecycle() yang mengembalikan instance Lifecycle. Contoh implementor bawaan: Fragment dan AppCompatActivity.

LifecycleObserver adalah interface yang diimplementasikan oleh komponen yang ingin merespons perubahan lifecycle. Anotasi @OnLifecycleEvent digunakan untuk menandai metode yang harus dipanggil saat event tertentu terjadi:

class MyObserver : LifecycleObserver {
 
    @OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
    fun connectListener() {
        // dipanggil otomatis saat Activity/Fragment di-resume
    }
 
    @OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
    fun disconnectListener() {
        // dipanggil otomatis saat Activity/Fragment di-pause
    }
}

Untuk mendaftarkan observer ke lifecycle tertentu:

myLifecycleOwner.getLifecycle().addObserver(MyObserver())

Setelah ini, MyObserver akan secara otomatis menerima event lifecycle dari myLifecycleOwner tanpa Activity/Fragment perlu memanggil metode observer secara manual di setiap callback.

Summary

Lifecycle-aware components menggunakan library androidx.lifecycle agar komponen dapat mengatur dirinya sendiri berdasarkan lifecycle tanpa membebani Activity/Fragment. Tiga konsep inti: Lifecycle menyimpan state dan mendispatch event; LifecycleOwner (contoh: Fragment, AppCompatActivity) mengekspos Lifecycle via getLifecycle(); dan LifecycleObserver mendaftarkan dirinya ke Lifecycle dan menggunakan anotasi @OnLifecycleEvent untuk merespons perubahan state secara otomatis, menghasilkan kode yang lebih bersih dan terhindar dari memory leak.