Berbagai peristiwa, yang dipicu oleh pengguna dan dipicu oleh sistem, dapat menyebabkan an
Activity bertransisi antar-status. Dokumen ini menjelaskan beberapa kasus umum saat transisi ini terjadi dan cara menangani transisi tersebut.
Untuk mengetahui informasi selengkapnya tentang status aktivitas, lihat Siklus proses aktivitas. Untuk
mempelajari cara class ViewModel dapat membantu Anda mengelola siklus proses aktivitas, lihat Ringkasan ViewModel.
Untuk sebagian besar perubahan aktivitas, Anda tidak perlu merespons callback secara langsung dalam siklus proses aktivitas. Karena Compose membangun ulang UI dari status, Anda dapat memanfaatkan
rekomposisi otomatis dengan memastikan status disimpan di
tempat yang sesuai, seperti rememberSaveable atau ViewModel.
Perubahan konfigurasi terjadi
Ada sejumlah peristiwa yang dapat memicu perubahan konfigurasi. Mungkin contoh yang paling menonjol adalah perubahan antara orientasi potret dan lanskap. Kasus lain yang dapat menyebabkan perubahan konfigurasi mencakup perubahan setelan bahasa atau perangkat input.
Jika perubahan konfigurasi terjadi, aktivitas akan diakhiri dan dibuat ulang. Hal ini akan memicu callback berikut dalam instance aktivitas asli:
Instance baru dari aktivitas akan dibuat, dan callback berikut akan dipicu:
Di Compose, biasanya Anda tidak berinteraksi dengan callback ini secara langsung. Sebagai gantinya, gunakan Lifecycle API untuk mengamati perubahan status. Di Compose, Anda dapat menggunakan LocalLifecycleOwner.current untuk mendapatkan siklus proses saat ini dan menambahkan pengamat, sehingga Anda dapat merespons peristiwa.
Gunakan kombinasi instance ViewModel, rememberSaveable, atau penyimpanan lokal persisten untuk mempertahankan status UI aktivitas pada seluruh perubahan konfigurasi.
Menentukan cara menggabungkan opsi ini bergantung pada kompleksitas data UI Anda, kasus penggunaan untuk aplikasi Anda, dan pertimbangan kecepatan pengambilan dibandingkan dengan penggunaan memori. Untuk sebagian besar kasus penggunaan, Anda harus mengangkat status ke ViewModel dan menggunakan rememberSaveable untuk memastikan status tetap ada melalui perubahan konfigurasi dan proses penghentian yang dimulai oleh sistem. Untuk mengetahui informasi selengkapnya tentang cara menyimpan
status UI aktivitas Anda, lihat Menyimpan status UI.
Saat aktivitas dibuat ulang karena perubahan konfigurasi, komposisi awal akan dihapus. Menggunakan ViewModel atau rememberSaveable akan memastikan status UI Anda dipulihkan dalam komposisi baru.
Untuk mengetahui informasi selengkapnya, lihat Siklus Proses di Jetpack Compose dan Status dan Jetpack Compose.
Menangani kasus multi-aplikasi
Jika aplikasi memasuki mode multi-aplikasi, tersedia di Android 7.0 (API level 24) dan yang lebih tinggi, sistem akan memberitahukan aktivitas perubahan konfigurasi yang sedang berjalan, sehingga aplikasi melakukan transisi siklus proses yang dijelaskan sebelumnya.
Perilaku ini juga terjadi jika aplikasi yang sudah berada dalam mode multi-aplikasi diubah ukurannya. Aktivitas Anda dapat menangani perubahan konfigurasi itu sendiri, atau dapat memungkinkan sistem untuk mengakhiri aktivitas dan membuatnya kembali dengan dimensi baru.
Untuk mengetahui informasi selengkapnya tentang siklus proses multi-aplikasi, lihat penjelasan siklus proses multi-aplikasi di Mendukung mode multi-aplikasi.
Dalam mode multi-aplikasi, meskipun ada dua aplikasi yang terlihat oleh pengguna, hanya satu aplikasi yang berinteraksi dengan pengguna di latar depan dan memiliki fokus. Aktivitas tersebut dalam status Dilanjutkan, sedangkan aplikasi di jendela lain dalam status Dijeda.
Saat pengguna beralih dari aplikasi A ke aplikasi B, sistem memanggil onPause pada
aplikasi A dan onResume pada aplikasi B. Sistem beralih di antara kedua metode ini setiap kali pengguna beralih antar-aplikasi.
Untuk mengetahui detail selengkapnya tentang mode multi-aplikasi, lihat Mendukung mode multi-aplikasi.
Aktivitas atau dialog muncul di latar depan
Jika aktivitas atau dialog baru muncul di latar depan, mengambil fokus, dan menutupi sebagian aktivitas yang sedang berlangsung, aktivitas yang tertutupi ini akan kehilangan fokus dan memasuki status Dijeda. Kemudian, sistem akan memanggil onPause untuk aktivitas tersebut.
Setelah aktivitas yang tertutup kembali ke latar depan dan mendapatkan kembali fokus, sistem akan memanggil onResume.
Jika aktivitas atau dialog baru muncul di latar depan, mengambil fokus, dan sepenuhnya menutupi aktivitas yang sedang berlangsung, aktivitas yang tertutupi akan kehilangan fokus dan memasuki status Berhenti. Sistem kemudian akan memanggil
onPause dan onStop secara bergantian.
Jika instance yang sama dari aktivitas yang tertutupi kembali ke latar depan, sistem akan memanggil onRestart, onStart, dan onResume pada aktivitas tersebut. Jika aktivitas adalah instance baru dari aktivitas yang tertutup yang muncul di latar belakang, sistem tidak akan memanggil onRestart, melainkan hanya memanggil onStart dan onResume.
Rekomposisi tidak terpengaruh oleh dialog yang muncul di latar depan. Namun,
efek samping yang terkait dengan siklus proses, seperti alur dan animasi, harus menggunakan
API yang berbasis siklus proses (seperti collectAsStateWithLifecycle) untuk
otomatis menjeda dan melanjutkan pekerjaan sesuai kebutuhan. Untuk mengetahui informasi selengkapnya, lihat Status
dan Jetpack Compose.
Pengguna mengetuk atau melakukan gestur Kembali
Jika aktivitas berada di latar depan dan pengguna mengetuk atau melakukan gestur Kembali, aktivitas akan bertransisi melalui callback onPause, onStop, dan
onDestroy. Aktivitas akan diakhiri dan dihapus dari data sebelumnya.
Di aplikasi satu aktivitas, seperti sebagian besar aplikasi Compose, rememberSaveable tidak akan mempertahankan status jika composable dihapus dari data sebelumnya navigasi. Hal ini karena, saat pengguna mengetuk Kembali, tidak ada harapan bahwa mereka akan kembali ke instance yang sama, sehingga semua status akan dihapus.
Untuk menerapkan perilaku Kembali kustom, seperti menampilkan dialog yang meminta pengguna untuk mengonfirmasi bahwa mereka ingin keluar dari aplikasi Anda, gunakan NavigationEventHandler API.
Sistem mengakhiri proses aplikasi
Jika aplikasi berada di latar belakang dan sistem perlu mengosongkan memori untuk aplikasi latar depan, sistem dapat mengakhiri aplikasi latar belakang. Saat sistem mengakhiri aplikasi, tidak ada jaminan bahwa onDestroy akan dipanggil di aplikasi.
Untuk mempelajari lebih lanjut cara sistem memutuskan proses mana yang akan diakhiri, baca Status aktivitas dan pengeluaran dari memori serta Proses dan siklus proses aplikasi.
Untuk mempelajari cara menyimpan status UI aktivitas saat sistem mengakhiri proses aplikasi Anda, lihat Menyimpan dan memulihkan status UI sementara.