Peristiwa berbeda, yang dipicu oleh pengguna dan dipicu oleh sistem, dapat menyebabkan
Activity
bertransisi dari satu status ke
status lainnya. Dokumen ini menjelaskan beberapa kasus umum saat transisi tersebut terjadi dan cara menangani transisi tersebut.
Untuk informasi selengkapnya tentang status aktivitas, lihat Siklus proses
aktivitas. Untuk mempelajari cara
class ViewModel
dapat
membantu Anda mengelola siklus proses aktivitas, lihat ringkasan
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 pada setelan bahasa atau perangkat input.
Jika perubahan konfigurasi terjadi, aktivitas akan diakhiri dan dibuat ulang. Tindakan ini akan memicu callback berikut pada instance aktivitas asli:
Instance baru dari aktivitas dibuat dan callback berikut dipicu:
Gunakan kombinasi instance ViewModel
, metode onSaveInstanceState()
, atau
penyimpanan lokal persisten untuk mempertahankan status UI aktivitas di seluruh perubahan
konfigurasi. Menentukan cara menggabungkan opsi ini bergantung pada kompleksitas
data UI, kasus penggunaan untuk aplikasi, dan pertimbangan kecepatan pengambilan
versus penggunaan memori. Untuk informasi selengkapnya tentang menyimpan status UI aktivitas Anda, lihat
Menyimpan status UI.
Menangani kasus multi-aplikasi
Saat aplikasi memasuki mode multi-aplikasi, yang tersedia di Android 7.0 (API level 24) dan yang lebih tinggi, sistem akan memberi tahu aktivitas yang sedang berjalan mengenai perubahan konfigurasi, sehingga aplikasi akan melalui 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 konfigurasinya sendiri, atau dapat mengizinkan sistem menghancurkan aktivitas dan membuatnya kembali dengan dimensi baru.
Untuk mengetahui informasi selengkapnya tentang siklus proses multi-aplikasi, lihat penjelasan siklus proses multi-aplikasi di halaman Dukungan multi-aplikasi.
Dalam mode multi-aplikasi, meskipun ada dua aplikasi yang terlihat oleh pengguna, hanya satu aplikasi yang berinteraksi dengan pengguna yang berjalan di latar depan dan mendapatkan fokus. Aktivitas tersebut dalam status Dilanjutkan, sedangkan aplikasi di jendela lain dalam status Dijeda.
Saat pengguna beralih dari aplikasi A ke aplikasi B, sistem akan memanggil
onPause()
di aplikasi A dan
onResume()
di aplikasi B. Ini akan beralih
di antara dua metode ini setiap kali pengguna beralih antar-aplikasi.
Untuk detail selengkapnya tentang mode multi-aplikasi, lihat Dukungan multi-aplikasi.
Aktivitas atau dialog muncul di latar depan
Jika aktivitas atau dialog baru muncul di latar depan, mengambil fokus, dan
menutup sebagian aktivitas yang sedang berlangsung, aktivitas yang tertutupi akan kehilangan fokus
dan memasuki status Dijeda. Kemudian, sistem akan memanggil
onPause()
untuk aktivitas tersebut.
Saat 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
menutupi sepenuhnya aktivitas yang sedang berlangsung, aktivitas yang tertutupi akan kehilangan fokus
dan memasuki status Berhenti. Selanjutnya, sistem akan memanggil
onPause()
dan onStop()
secara berurutan.
Saat instance yang sama dari aktivitas yang tertutup kembali ke latar depan, sistem akan memanggil onRestart()
,
onStart()
, dan
onResume()
pada aktivitas tersebut. Jika
ini adalah instance baru dari aktivitas yang tertutup yang muncul di latar belakang, sistem tidak akan memanggil onRestart()
, hanya
onStart()
dan onResume()
.
Pengguna mengetuk atau gestur Kembali
Jika aktivitas berada di latar depan dan pengguna mengetuk atau memberi gestur Kembali,
aktivitas akan bertransisi melalui
callback
onPause()
,
onStop()
, dan
onDestroy()
. Aktivitas akan dihancurkan dan dihapus dari data sebelumnya.
Secara default, callback
onSaveInstanceState()
tidak diaktifkan dalam kasus ini. Perilaku ini mengasumsikan bahwa pengguna mengetuk Kembali dengan
tidak berharap untuk kembali ke instance yang sama dari aktivitas tersebut.
Namun, Anda dapat mengganti metode
onBackPressed()
untuk
menerapkan perilaku kustom, seperti menampilkan dialog yang meminta pengguna untuk
mengonfirmasi bahwa mereka ingin keluar dari aplikasi Anda.
Jika Anda mengganti metode onBackPressed()
, sebaiknya
Anda tetap memanggil super.onBackPressed()
dari
metode yang telah diganti. Jika tidak, perilaku Kembali sistem mungkin akan mengganggu
pengguna.
Sistem mengakhiri proses aplikasi
Jika aplikasi berada di latar belakang dan sistem perlu mengosongkan memori
untuk aplikasi latar depan, sistem dapat menghentikan aplikasi latar belakang.
Saat sistem menghentikan aplikasi, tidak ada jaminan bahwa onDestroy()
dipanggil
dalam aplikasi.
Untuk mempelajari lebih lanjut cara sistem menentukan proses yang akan dihancurkan, baca Status aktivitas dan pengeluaran dari memori serta Proses dan siklus proses aplikasi.
Untuk mempelajari cara menyimpan status UI aktivitas saat sistem menghentikan proses aplikasi Anda, lihat Menyimpan dan memulihkan status UI sementara.