Apa siklus hidup dari aktivitas Android? Mengapa begitu banyak metode terdengar sama ( onCreate()
, onStart()
, onResume()
) disebut selama inisialisasi, dan banyak orang lain ( onPause()
, onStop()
, onDestroy()
) disebut di akhir?
Kapan metode-metode ini disebut, dan bagaimana cara menggunakannya dengan benar?
Jawaban:
Lihat di Siklus Hidup Aktivitas (di Pengembang Android).
onCreate () :
onRestart () :
onStart () :
onResume () :
onPause () :
onStop () :
onDestroy () :
Ketika Kegiatan pertama kali memuat acara disebut sebagai berikut:
Ketika Anda mengklik tombol Telepon , Kegiatan pergi ke latar belakang dan acara di bawah ini disebut:
Keluar dari dialer telepon dan acara di bawah ini akan dipanggil:
Ketika Anda mengklik tombol kembali ATAU mencoba untuk menyelesaikan () aktivitas acara disebut sebagai berikut:
Negara Aktivitas
OS Android menggunakan antrian prioritas untuk membantu mengelola aktivitas yang berjalan di perangkat. Berdasarkan status aktivitas Android tertentu, ia akan diberi prioritas tertentu dalam OS. Sistem prioritas ini membantu Android mengidentifikasi kegiatan yang tidak lagi digunakan, memungkinkan OS untuk mendapatkan kembali memori dan sumber daya. Diagram berikut menggambarkan kondisi yang dapat dilalui suatu aktivitas, selama masa pakainya:
Negara-negara ini dapat dibagi menjadi tiga kelompok utama sebagai berikut:
Aktif atau Berlari - Aktivitas dianggap aktif atau berjalan jika berada di latar depan, juga dikenal sebagai bagian atas tumpukan aktivitas. Ini dianggap sebagai kegiatan prioritas tertinggi dalam tumpukan Aktivitas Android, dan karenanya hanya akan dibunuh oleh OS dalam situasi ekstrem, seperti jika aktivitas tersebut mencoba menggunakan lebih banyak memori daripada yang tersedia pada perangkat karena ini dapat menyebabkan UI menjadi tidak responsif.
Dijeda - Saat perangkat tertidur, atau suatu aktivitas masih terlihat tetapi sebagian disembunyikan oleh aktivitas baru, tidak berukuran penuh atau transparan, aktivitas tersebut dianggap dijeda. Aktivitas yang dijeda masih hidup, yaitu, mereka memelihara semua informasi negara dan anggota, dan tetap melekat pada window manager. Ini dianggap sebagai aktivitas prioritas tertinggi kedua di tumpukan Aktivitas Android dan, karenanya, hanya akan dimatikan oleh OS jika mematikan aktivitas ini akan memenuhi persyaratan sumber daya yang diperlukan untuk menjaga Aktivitas Aktif / Lari stabil dan responsif.
Berhenti - Kegiatan yang sepenuhnya dikaburkan oleh kegiatan lain dianggap berhenti atau di latar belakang. Aktivitas yang dihentikan masih mencoba untuk mempertahankan informasi negara dan anggota mereka selama mungkin, tetapi aktivitas yang dihentikan dianggap sebagai prioritas terendah dari tiga negara dan, dengan demikian, OS akan membunuh aktivitas di negara ini terlebih dahulu untuk memenuhi kebutuhan sumber daya. kegiatan prioritas yang lebih tinggi.
* Contoh aktivitas untuk memahami siklus hidup **
sumber
Aktivitas memiliki enam status
Siklus hidup aktivitas memiliki tujuh metode
onCreate()
onStart()
onResume()
onPause()
onStop()
onRestart()
onDestroy()
Situasi
Saat membuka aplikasi
Ketika tombol kembali ditekan dan keluar dari aplikasi
Saat tombol home ditekan
Setelah menekan tombol home ketika membuka lagi aplikasi dari daftar tugas terbaru atau mengklik ikon
Saat membuka aplikasi, aplikasi lain dari bilah notifikasi atau pengaturan terbuka
Tombol kembali ditekan dari aplikasi atau pengaturan lain yang kemudian digunakan dapat melihat aplikasi kami
Ketika ada dialog yang terbuka di layar
Setelah mengabaikan dialog atau tombol kembali dari dialog
Telepon apa pun berdering dan pengguna di aplikasi
Ketika pengguna menekan tombol jawab telepon
Setelah panggilan selesai
Saat layar ponsel mati
Ketika layar dihidupkan kembali
sumber
Seluruh kebingungan disebabkan karena Google memilih nama yang tidak intuivatif alih-alih sebagai berikut:
Diagram Aktivitas dapat diartikan sebagai:
sumber
SIKLUS HIDUP ANDROID
Ada tujuh metode yang mengelola siklus hidup aplikasi Android:
Jawab untuk apa semua metode ini untuk:
Mari kita ambil skenario sederhana di mana mengetahui urutan metode ini disebut akan membantu kita memberikan kejelasan mengapa mereka digunakan.
onCreate()
- - -> - - ->onStart()
onResume()
onPause()
- - ->onStop()
onRestart()
- - -> - - ->onStart()
onResume()
onStop()
- - ->onDestroy()
Ada empat kondisi yang bisa dilakukan oleh suatu kegiatan:
Mulai negara melibatkan:
Membuat proses Linux baru, mengalokasikan memori baru untuk objek UI baru, dan mengatur seluruh layar. Jadi sebagian besar pekerjaan terlibat di sini.
Menjalankan negara melibatkan:
Aktivitas (status) yang saat ini ada di layar. Keadaan ini saja menangani hal-hal seperti mengetik di layar, dan menyentuh & mengklik tombol.
Keadaan jeda melibatkan:
Ketika suatu kegiatan tidak di latar depan dan sebaliknya itu di latar belakang, maka aktivitas tersebut dikatakan dalam keadaan jeda.
Negara berhenti melibatkan:
Aktivitas yang dihentikan hanya dapat dibeli ke latar depan dengan memulai kembali dan juga dapat dihancurkan pada titik waktu tertentu.
Manajer aktivitas menangani semua status ini sedemikian rupa sehingga pengalaman dan kinerja pengguna selalu yang terbaik bahkan dalam skenario di mana aktivitas baru ditambahkan ke aktivitas yang ada
sumber
Saya suka pertanyaan ini dan jawabannya, tetapi sejauh ini tidak ada cakupan callback yang lebih jarang digunakan seperti onPostCreate () atau onPostResume () . Steve Pomeroy telah mencoba diagram termasuk ini dan bagaimana mereka berhubungan dengan siklus hidup Fragmen Android , di https://github.com/xxv/android-lifecycle . Saya merevisi diagram besar Steve untuk memasukkan hanya bagian Activity dan memformatnya untuk cetakan satu halaman berukuran huruf. Saya telah mempostingnya sebagai teks PDF di https://github.com/code-read/android-lifecycle/blob/master/AndroidActivityLifecycle1.pdf dan di bawah ini adalah gambarnya:
sumber
Dari halaman Android Developers,
onPause ():
onStop ():
Sekarang anggaplah ada tiga Kegiatan dan Anda pergi dari A ke B, maka onPause dari A akan dipanggil sekarang dari B ke C, kemudian onPause dari B dan onStop dari A akan dipanggil.
Aktivitas yang dijeda mendapat Resume dan Berhenti akan Restart.
Saat Anda menelepon
this.finish()
, onPause-onStop-onDestroy akan dipanggil. Hal utama yang harus diingat adalah: Aktivitas yang dihentikan dihentikan dan aktivitas yang Dihentikan akan Hancur setiap kali Android membutuhkan memori untuk operasi lain.Saya harap itu cukup jelas.
sumber
Menambahkan beberapa info lebih lanjut di atas jawaban berperingkat tinggi (Menambahkan bagian tambahan KILLABLE dan serangkaian metode berikutnya, yang akan dipanggil dalam siklus hidup):
Sumber: developer.android.com
Perhatikan kolom "Dapat Dibunuh " pada tabel di atas - untuk metode yang ditandai sebagai dapat dimatikan, setelah metode itu mengembalikan proses yang menjadi hosting, aktivitas tersebut dapat dimatikan oleh sistem kapan saja tanpa ada baris kode yang dieksekusi.
Karena itu, Anda harus menggunakan
onPause()
metode ini untuk menulis data persisten (seperti suntingan pengguna) ke penyimpanan. Selain itu, metodeonSaveInstanceState(Bundle)
ini dipanggil sebelum menempatkan aktivitas dalam keadaan latar belakang seperti itu, yang memungkinkan Anda untuk menyimpan keadaan instance dinamis apa pun dalam aktivitas Anda ke dalam yang diberikanBundle
, untuk kemudian diterimaonCreate(Bundle)
jika aktivitas perlu dibuat kembali.Perhatikan bahwa penting untuk menyimpan data persisten
onPause()
alih-alihonSaveInstanceState(Bundle)
karena yang terakhir bukan bagian dari daur ulang siklus hidup, jadi tidak akan dipanggil dalam setiap situasi seperti yang dijelaskan dalam dokumentasinya.Saya ingin menambahkan beberapa metode lagi. Ini tidak terdaftar sebagai metode siklus hidup tetapi mereka akan dipanggil selama siklus hidup tergantung pada beberapa kondisi. Tergantung pada kebutuhan Anda, Anda mungkin harus menerapkan metode ini dalam aplikasi Anda untuk penanganan negara yang tepat.
Kode aplikasi saya menggunakan semua metode ini:
Aktivitas Masuk:
output: (Sebelum jeda)
output: (Setelah melanjutkan dari jeda)
Catatan yang
onPostResume()
dipanggil meskipun itu tidak dikutip sebagai metode siklus hidup.sumber
Saya menjalankan beberapa log sesuai jawaban di atas dan di sini adalah output:
Mulai Kegiatan
Menghentikan Aktivitas
Menurut pendapat pribadi saya, hanya dua yang diperlukan onStart dan onStop.
onResume tampaknya ada di setiap instance untuk kembali, dan onPause dalam setiap instance meninggalkan (kecuali untuk menutup aplikasi).
sumber