Perubahan status aktivitas

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:

  1. onPause()
  2. onStop()
  3. onDestroy()

Instance baru dari aktivitas dibuat dan callback berikut dipicu:

  1. onCreate()
  2. onStart()
  3. onResume()

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.