Dari doc android di sini http://developer.android.com/reference/android/app/Activity.html , dikatakan 'Aktivitas masuk ke latar depan' akan memanggil onPause()
, dan 'Aktivitas tidak lagi terlihat' akan memanggil onStop()
.
Bukankah 'Aktivitas muncul di depan' sama dengan 'Aktivitas tidak lagi terlihat'? Bisakah Anda memberi tahu saya apa perbedaan di antara mereka?
paused
kegiatan benar - benar hidup (itu memelihara semua informasi negara dan anggota dan tetap melekat pada manajer jendela). Suatustopped
kegiatan juga menyimpan semua informasi negara dan anggota, tetapi tidak lagi dilampirkan padawindow manager
.Jawaban:
Tidak, jika beberapa aktivitas muncul di latar depan, itu tidak berarti bahwa aktivitas lain sama sekali tidak terlihat. Pertimbangkan kasus berikut:
Di sini kita melihat kedua kegiatan pada saat bersamaan. Aktivitas pertama dengan bidang dikaburkan oleh aktivitas lain, dan pengguna tidak lagi dapat berinteraksi dengannya. Namun, masih terlihat dengan semua konsekuensi yang dihasilkan.
Itu menyisakan pertanyaan kegiatan mana yang dianggap sepenuhnya buram dan menutupi seluruh layar dan mana yang tidak. Keputusan ini didasarkan pada jendela yang berisi aktivitas. Jika jendela memiliki bendera
windowIsFloating
atauwindowIsTranslucent
, maka dianggap bahwa aktivitas tersebut tidak membuat hal-hal yang mendasarinya tidak terlihat, jika tidak maka akan menyebabkanonStop()
dipanggil. Kode yang relevan dapat ditemukan dicom.android.server.am.ActivityRecord
:sumber
onPause()
danonStop()
. Apakah 100%? Jika hanya satu piksel dari aktivitas sebelumnya yang terlihat, apakah masihonPause()
?onPause()
tidak dipanggil sama sekali ketika dialog ditampilkan.onPause()
hanya dipanggil ketika saya menekan tombol beranda . Bagaimana ini mungkin?Jika Anda masih dapat melihat bagiannya (
Activity
datang ke latar depan tidak menempati seluruh layar, atau agak transparan),onPause()
akan dipanggil. Jika Anda tidak dapat melihat bagiannya,onStop()
akan dipanggil.Dialog **, misalnya, mungkin tidak mencakup keseluruhan sebelumnya
Activity
, dan ini akan menjadi waktu untukonPause()
dipanggil.** Saya tidak merujuk ke Dialog Android di sini, melainkan ide konseptual dari sesuatu yang muncul dan hanya mengaburkan bagian dari layar pengguna. Catatan ini ditambahkan untuk mengklarifikasi berdasarkan komentar dari @GMsoF di bawah ini
sumber
Dialog
, seperti di kelas Android. Apa yang saya maksudkan adalah sesuatu yang sebagian mengaburkan yang pertamaActivity
untuk menggambarkan gagasan bahwa semua yang baruActivity
tidak perlu sepenuhnya menutupi yang sebelumnya.Berada di latar depan berarti bahwa aktivitas memiliki fokus input. Misalnya, suatu kegiatan dapat terlihat tetapi sebagian dikaburkan oleh dialog yang memiliki fokus. Dalam hal ini,
onPause()
akan dipanggil, tetapi tidakonStop()
. Ketika dialog hilang, metode aktivitasonResume()
akan dipanggil (tetapi tidakonStart()
).sumber
onPause()
dipanggil saat perangkat tidur atau saat dialog muncul" . Karena utas ini memperjelas, suatu dialog tidak selalu berarti bahwa suatu kegiatan dijeda (walaupun itu untuk, katakanlah, suatu kegiatan yang ditampilkan sebagai dialog ).Secara praktis , seseorang harus mempertimbangkan perbedaan antara "onPause ()" dan "onPause () + onStop ()".
Setiap kali beberapa aktivitas baru terjadi dan menempati sebagian ruang Layar. Jadi aktivitas Anda yang sebelumnya berjalan masih terlihat sampai batas tertentu. Dalam hal ini, aktivitas yang berjalan sebelumnya tidak didorong ke Back Stack. Jadi, di sini hanya metode onPause () yang dipanggil .
Di sisi lain, jika beberapa Kegiatan baru terjadi dan menempati layar penuh sehingga aktivitas yang sebelumnya Anda jalankan menghilang. Dalam hal ini, aktivitas Anda yang sebelumnya berjalan dipindahkan ke Back Stack. Di sini, onPause () + onStop () dipanggil.
Untuk Ringkasan-
onPause () - Layar sebagian dicakup oleh aktivitas baru lainnya. Aktivitas tidak dipindahkan ke Back Stack.
onPause () + onStop () - Layar sepenuhnya tercakup oleh aktivitas baru lainnya. Aktivitas dipindahkan ke Back Stack.
Tahu lebih banyak tentang- Back Stack .
sumber
Dengan kata-kata singkat:
onStop()
metode siklus hidup aktivitas sebelumnya dipanggil ketika aktivitas lain ditampilkan. Ketika Anda memiliki Dialog di atas aktivitas, di sanaonPause()
dipanggil.Catatan : Aktivitas adalah komponen yang memenuhi seluruh layar Anda.
Catatan : Dialog bukan Kegiatan karena tidak sepenuhnya mengisi layar.
sumber
Saya menghadapi banyak masalah dengan metode onPause dan onStop dan karenanya saya akan menghapus tiga skenario yang saya temui -
1. Ketika Anda mengklik tombol aplikasi baru-baru ini, tidak ada metode siklus hidup yang dipanggil tetapi onWindowFocusChanged (boolean hasFocus) dipanggil dengan nilai hasFocus dianggap salah. Dalam versi android sebelum 5, metode onPause digunakan untuk dipanggil, dengan menekan tombol aplikasi baru-baru ini.
2. Ketika aktivitas yang muncul muncul di aktivitas Anda, seperti yang disebutkan oleh Malcolm , tombol onPause dipanggil. Jika aktivitas baru yang mengambil seluruh layar disebut, maka onStop dipanggil pada aktivitas sebelumnya. Dialog izin Android juga menyebabkan aktivitas Anda memanggil OnPause.
3.Jika layar habis pada aktivitas Anda, maka onPause dipanggil. Setelah beberapa saat jika Anda tidak akan membuka layar maka onStop akan dipanggil.
Juga satu hal penting yang disebutkan oleh ateiob yang melengkapi jawabannya
Semoga ini bisa membantu.
sumber
setiap kali AKTIFITAS baru memulai aktivitas sebelumnya
onPause
akan secara menantang dipanggil dalam keadaan apa pun.sebenarnya akan ada dua keadaan:
1- bagian dari aktivitas sebelumnya terlihat atau aktivitas baru transparan: hanya
onPause
akan dipanggil.2- aktivitas sebelumnya sepenuhnya tercakup oleh aktivitas baru: keduanya
onPause
danonStop
akan dipanggil---- Baik untuk menyatakan beberapa catatan:
CATATAN 1: jika dialog dimulai di atas aktivitas, TIDAK ada
onPause
atauonStop
akan dipanggil.CATATAN 2: jika suatu Aktivitas yang temanya disetel ke dialog, perilakunya akan seperti aktivitas normal.
CATATAN 3: tampaknya dialog sistem seperti dialog izin karena marshmallow akan menyebabkannya
onPause
.sumber
Ya, saya mencoba memahami dan saya bisa menjelaskan ini di bawah ini:
Ada 2 kegiatan: ActivityA & ActivityB
Ini aktivitas B. Ikuti komentar saya di kode
Saya harap ini jelas
sumber