SingleLiveEvent
SingleLiveEvent adalah subkelas dari MutableLiveData dengan satu Pengamat yang Mengamatinya pada satu waktu, oleh karena itu ia mengetahui siklus hidup tampilan.
Masalah
Masalah dimulai karena LiveData menjanjikan beberapa keuntungan dimana Anda dapat menemukannya dalam dokumentasinya . Saya daftar mereka di sini dengan cara:
Memastikan UI Anda cocok dengan status data Anda, LiveData mengikuti pola pengamat. LiveData memberi tahu Observerobjek saat status siklus hidup berubah. Anda dapat menggabungkan kode Anda untuk memperbarui UI di Observerobjek ini. Alih-alih memperbarui UI setiap kali data aplikasi berubah, pengamat Anda dapat memperbarui UI setiap kali ada perubahan.
Tidak ada kebocoran memori Pengamat terikat pada Lifecycleobjek dan membersihkannya sendiri saat siklus hidup terkaitnya dihancurkan.
Tidak ada crash karena aktivitas yang dihentikan Jika siklus hidup pengamat tidak aktif, seperti dalam kasus aktivitas di back-stack, maka aktivitas LiveData tidak akan diterima.
Tidak ada lagi komponen UI penanganan siklus hidup manual , cukup amati data yang relevan dan jangan hentikan atau lanjutkan pengamatan. LiveData secara otomatis mengelola semua ini karena menyadari perubahan status siklus hidup yang relevan saat mengamati.
Data selalu terbarui Jika siklus hidup menjadi tidak aktif, ia menerima data terbaru setelah menjadi aktif kembali. Misalnya, aktivitas yang berada di latar belakang menerima data terbaru tepat setelah aktivitas tersebut kembali ke latar depan.
Perubahan konfigurasi yang tepat Jika aktivitas atau fragmen dibuat ulang karena perubahan konfigurasi, seperti rotasi perangkat, aktivitas atau fragmen akan segera menerima data terbaru yang tersedia.
Berbagi sumber daya Anda dapat memperluas LiveDataobjek menggunakan pola tunggal untuk membungkus layanan sistem sehingga dapat dibagikan di aplikasi Anda. Objek LiveDataterhubung ke layanan sistem satu kali, dan kemudian pengamat mana pun yang membutuhkan sumber daya dapat menonton LiveDataobjek tersebut. Untuk informasi lebih lanjut.
Tetapi beberapa keuntungan ini tidak dapat berguna di semua skenario dan tidak ada cara untuk menonaktifkannya saat Anda membuat instance LiveData. Misalnya, properti "data selalu terbarui" tidak dapat dinonaktifkan dan masalah utama yang ingin ditangani artikel ini adalah cara menonaktifkannya.
Namun, saya harus berterima kasih kepada Google untuk properti "perubahan konfigurasi yang tepat", yang sangat berguna. Tapi tetap saja, kita harus bisa menonaktifkannya saat kita mau. Saya tidak memiliki skenario di mana saya perlu menonaktifkannya tetapi tolong biarkan orang memilih.
Mengapa menggunakan SingleLiveEvent
Untuk penyebaran acara UI, seperti Klik. Misalnya Menangani RecyclerView Klik Acara Dengan SingleLiveEvent .
Mengapa tidak menggunakan LiveData? Karena LiveDataakan terpicu lagi saat perubahan konfigurasi/rotasi layar. Kami ingin menangani acara UI seperti klik sekali saja.
Jadi, Apa Solusinya di sini?
Untuk jenis tugas ini, kelas SingleLiveEvent datang untuk menyelamatkan. Ini tidak lain adalah perpanjangan dari kelas MutableLiveData tetapi memancarkan data hanya sekali kapan pun diperlukan.
Kita perlu membuat file kelas bernama SingleLiveEvent di proyek kita dan untuk menggunakannya di ViewModel Anda hanya perlu menggunakannya dengan cara yang sama seperti kami menggunakan LiveData,
private val uploadData = SingleLiveEvent<String>()
fun getUploadData (): SingleLiveEvent<String> {
return uploadData
}
Sumber
Android SingleLiveEvent (of LiveData) for UI Event