Menangani Perubahan Status Aktivitas

Berbagai peristiwa, yang dipicu oleh pengguna dan dipicu oleh sistem, dapat menyebabkan 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 Memahami Siklus Hidup Aktivitas. Untuk mempelajari cara class ViewModel dapat membantu Anda mengelola siklus hidup aktivitas, lihat Memahami Class 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 bahasa atau perangkat input.

Jika perubahan konfigurasi terjadi, aktivitas akan diakhiri dan dibuat ulang. Instance aktivitas asli akan memicu callback onPause(), onStop(), dan onDestroy(). Instance baru dari aktivitas akan dibuat lalu memicu callback onCreate(), onStart(), dan onResume().

Gunakan kombinasi ViewModels, metode onSaveInstanceState(), dan/atau penyimpanan lokal persisten untuk mempertahankan status UI aktivitas pada seluruh perubahan konfigurasi. Penentuan cara menggabungkan opsi ini bergantung pada kompleksitas data UI, kasus penggunaan aplikasi, dan pertimbangan kecepatan pengambilan dibandingkan dengan penggunaan memori. Untuk informasi selengkapnya cara menyimpan status UI aktivitas Anda, lihat Menyimpan Status UI.

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 di atas. 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 informasi selengkapnya tentang siklus proses multi-aplikasi, lihat bagian Siklus Proses Multi-Aplikasi pada halaman Dukungan 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 detail selengkapnya tentang 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 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, aktivitas 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().

Catatan: Saat pengguna mengetuk tombol Ringkasan atau tombol Layar Utama, sistem berperilaku seolah-olah aktivitas saat ini telah sepenuhnya tertutupi.

Pengguna mengetuk tombol Kembali

Jika aktivitas berada di latar depan, dan pengguna mengetuk tombol Kembali, aktivitas akan bertransisi melalui callback onPause(), onStop(), dan onDestroy(). Selain diakhiri, aktivitas juga dihapus dari data sebelumnya.

Dalam kasus ini, ingat bahwa callback onSaveInstanceState() secara default tidak diaktifkan. Perilaku ini didasarkan pada asumsi bahwa pengguna telah mengetuk tombol Kembali dengan harapan pengguna tidak kembali ke instance yang sama dari aktivitas tersebut. Namun, Anda dapat mengganti metode onBackPressed() untuk menerapkan beberapa perilaku khusus, misalnya dialog "konfirmasi keluar".

Jika mengganti metode onBackPressed(), sebaiknya panggil metode super.onBackPressed() dari metode yang telah Anda ganti. Jika tidak, perilaku tombol Kembali mungkin akan terlihat janggal oleh pengguna.

Sistem mengakhiri proses aplikasi

Jika aplikasi berada di latar belakang dan sistem perlu mengosongkan memori tambahan untuk aplikasi latar depan, aplikasi latar belakang dapat diakhiri oleh sistem guna mengosongkan lebih banyak memori. Untuk mempelajari lebih lanjut cara sistem memutuskan proses mana yang akan diakhiri, baca Status aktivitas dan pengeluaran dari memori serta Proses dan Siklus Aplikasi.

Untuk mempelajari cara menyimpan status UI aktivitas saat sistem mengakhiri proses aplikasi Anda, lihat Menyimpan dan memulihkan status aktivitas.