Saya tidak bisa mendapatkan arti dari onStart()
kondisi transisi. The onResume()
Metode selalu disebut setelah onStart()
. Mengapa tidak dapat onResume()
dipanggil setelah onRestart()
dan onCreate()
metode hanya mengecualikan onStart()
? Apa tujuannya?
Mengapa kita tidak bisa hidup tanpanya onStart()
. Saya masih menganggapnya berlebihan (mungkin karena tidak mengerti artinya sepenuhnya).
Jawaban:
OK, karena jawaban pertama saya cukup panjang, saya tidak akan memperpanjang lebih jauh jadi mari kita coba ini ...
TOLONG DICATAT: Saya sengaja mengabaikan panggilan untuk hal-hal seperti
super.onCreate(...)
dll. Ini adalah kode semu jadi beri saya beberapa lisensi artistik di sini. ;)Metode untuk
DriveToWorkActivity
mengikuti ...OK, jadi satu lagi (maaf orang). Tapi inilah penjelasan saya ...
onResume()
adalah saat saya mulai mengemudi danonPause()
saat saya berhenti sementara. Jadi saya mengemudi kemudian mencapai lampu merah jadi saya berhenti ... lampu menjadi hijau dan saya melanjutkan. Lampu merah lain dan saya berhenti, lalu hijau jadi saya melanjutkan. TheonPause() -> onResume() -> onPause() -> onResume()
Loop adalah satu ketat dan terjadi berkali-kali melalui perjalanan saya.Putaran dari dihentikan kembali melalui restart (bersiap untuk melanjutkan perjalanan saya) untuk memulai lagi mungkin kurang umum. Dalam satu kasus, saya melihat Toko Kelontong dan
GroceryStoreActivity
mulai (memaksa sayaDriveToWorkActivity
ke titikonStop()
). Ketika saya kembali dari toko, saya pergionRestart()
danonStart()
melanjutkan perjalanan.Saya bisa memasukkan kode yang ada di
onStart()
keduanyaonCreate()
danonRestart()
dan tidak repot-repot menimpaonStart()
sama sekali tetapi semakin banyak yang perlu dilakukan antaraonCreate() -> onResume()
danonRestart() -> onResume()
, semakin saya menduplikasi hal-hal.Jadi, untuk mengutip kembali sekali lagi ...
Jika Anda tidak menimpa
onStart()
maka inilah yang terjadi secara efektif. MeskipunonStart()
metodeActivity
akan dipanggil secara implisit, efek dalam kode Anda efektifonCreate() -> onResume()
atauonRestart() -> onResume()
.sumber
onCreate()
danonRestart()
akan berbagi banyak kode umum, bukan?Activity
siklus hidup dapat digunakan. Tahap pembuatanonCreate(...)
mungkin dapat melakukan banyak hal ketika datang untuk membuat instance anggota (elemen UI dll) tetapi 'restart' tidak perlu melakukan itu. Pada kenyataannya banyakActivities
yang tidak benar-benar perlu menerapkan lebih darionCreate(...)
,onResume()
danonPause()
metode lain tersedia untuk kasus-kasus di mana Anda mungkin perlu melakukan hal-hal lain dan kuncinya adalah memahami di mana harus meletakkan kode.Activity
metode siklus hidup - ini adalah OS Android yang melakukannya dan melakukannya dengan sangat efisien (dengan asumsi pengembang aplikasi tahu apa yang mereka lakukan dan juga kode secara efisien). Jika Anda melakukan banyak pengembangan Android, Anda akan menyadari mengapa segala sesuatunya berjalan sebagaimana mestinya - itu tidak 100% sempurna tetapi cukup bagus.onStart
danonResume
adalah 'visibilitas' dan 'interaksi pengguna'. Metafora mengendarai mobil ini membingungkan dan tidak terlalu membantu.Jawaban singkat:
Kita tidak dapat hidup tanpa onStart karena itu adalah keadaan ketika aktivitas menjadi "terlihat" oleh pengguna, tetapi pengguna tidak dapat "berinteraksi" dengannya namun mungkin menyebabkannya tumpang tindih dengan beberapa dialog kecil lainnya. Kemampuan untuk berinteraksi dengan pengguna ini adalah yang membedakan onStart dan onResume. Anggap saja orang di balik pintu kaca. Anda dapat melihat orang itu tetapi Anda tidak dapat berinteraksi (berbicara / mendengarkan / berjabat tangan) dengannya. OnResume seperti pembuka pintu, setelah itu Anda dapat memulai interaksi.
Selain itu onRestart () adalah yang paling sedikit dipahami. Kita dapat mengajukan pertanyaan mengapa tidak langsung menuju ke onStart () atau onResume () setelah onStop () alih-alih onRestart (). Menjadi lebih mudah untuk dipahami jika kita perhatikan bahwa onRestart () sebagian setara dengan onCreate () jika bagian pembuatan dihilangkan. Pada dasarnya kedua status mengarah ke onStart () (yaitu Aktivitas menjadi terlihat). Jadi kedua negara harus "menyiapkan" barang yang akan ditampilkan. OnCreate memiliki tanggung jawab tambahan untuk "membuat" barang yang akan ditampilkan
Jadi struktur kode mereka mungkin cocok dengan sesuatu seperti:
Seluruh kebingungan disebabkan karena Google memilih nama yang tidak intuitif dan bukan sesuatu sebagai berikut:
Diagram Aktivitas dapat ditafsirkan sebagai:
sumber
onStart()
dipanggil saat aktivitas menjadi terlihat oleh pengguna.onResume()
dipanggil saat aktivitas akan mulai berinteraksi dengan pengguna. Anda mungkin ingin melakukan hal yang berbeda dalam kasus ini.Lihat tautan ini untuk referensi.
sumber
onResume()
disebut:onStart()
Activity
datang ke latar depan.Dari http://developer.android.com/reference/android/app/Activity.html#ActivityLifecycle :
sumber
Buku "Halo, Android, Memperkenalkan Platform Pengembangan Seluler Google" memberikan penjelasan yang bagus tentang siklus hidup aplikasi android. Untungnya mereka memiliki bab khusus online sebagai kutipan. Lihat gambar di halaman 39 di http://media.pragprog.com/titles/eband3/concepts.pdf
Ngomong-ngomong, buku ini sangat direkomendasikan untuk pemula android!
sumber
Contoh khusus yang penuh semangat adalah ketika Anda memutuskan untuk menampilkan Dialog yang dikelola dari suatu Aktivitas menggunakan
showDialog()
. Jika pengguna memutar layar saat dialog masih terbuka (kami menyebutnya "perubahan konfigurasi"), maka Aktivitas utama akan melewati semua panggilan siklus akhir hinggaonDestroy()
, akan diciptakan kembali, dan kembali melalui siklus hidup. Apa yang Anda mungkin tidak harapkan, adalah ituonCreateDialog()
danonPrepareDialog()
(metode yang dipanggil ketika Anda lakukanshowDialog()
dan sekarang lagi secara otomatis untuk membuat ulang dialog - secara otomatis karena itu adalah dialog yang dikelola) dipanggil antaraonStart()
danonResume()
. Intinya di sini adalah bahwa dialog tidak mencakup layar penuh dan karenanya meninggalkan bagian dari kegiatan utama yang terlihat. Ini detail tapi itu penting!sumber
onStart()
onStart()
untuk memantau perubahan yang berdampak pada UI Anda, Anda harus membatalkan pendaftarannya di onStop ()onResume()
onStart()
biasanya mengirimkan pekerjaan ke utas latar belakang, yang nilainya kembali adalah:START_STICKY untuk memulai ulang secara otomatis jika terbunuh, agar tetap aktif.
START_REDELIVER_INTENT
untuk restart otomatis dan coba lagi jika layanan mati sebelum stopSelf ().onResume()
dipanggil oleh OS setelah perangkat tidur atau setelah peringatan atau aktivitas anak layar parsial lainnya membuat sebagian dari jendela sebelumnya terlihat sehingga metode perlu menginisialisasi ulang bidang (dalam struktur percobaan dengan tangkapan pengecualian) ). Situasi seperti itu tidak menyebabkanonStop()
dipanggil ketika anak ditutup.onResume()
dipanggil tanpaonStart()
ketika aktivitas dilanjutkan dari latar belakangUntuk lebih jelasnya Anda dapat mengunjungi Android_activity_lifecycle_gotcha Dan Siklus Hidup Aktivitas
sumber
Semoga penjelasan sederhana: -
onStart () -> dipanggil ketika aktivitas menjadi terlihat, tetapi mungkin tidak ada di latar depan (misalnya AlertFragment di atas atau case use lainnya yang mungkin).
onResume () -> dipanggil saat aktivitas di latar depan, atau pengguna dapat berinteraksi dengan Aktivitas.
sumber
onStart()
berartiActivity
dimasukkan ke dalam keadaan terlihat dan tata letak dibuat tetapi tidak dapat berinteraksi dengan tata letak aktivitas ini.Resume()
artinya sekarang Anda dapat melakukan interaksi dengan tata letak aktivitas.sumber
Perhatikan bahwa ada hal-hal yang terjadi antara panggilan ke onStart () dan onResume (). Yaitu, onNewIntent (), yang saya temukan dengan menyakitkan.
Jika Anda menggunakan flag SINGLE_TOP, dan Anda mengirim beberapa data ke aktivitas Anda, menggunakan ekstra maksud, Anda akan dapat mengaksesnya hanya di onNewIntent (), yang dipanggil setelah onStart () dan sebelum onResume (). Jadi biasanya, Anda akan mengambil data baru (mungkin hanya dimodifikasi) dari ekstra dan mengaturnya ke beberapa anggota kelas, atau menggunakan setIntent () untuk mengatur maksud baru sebagai maksud aktivitas asli dan memproses data di onResume ().
sumber
Referensi ke http://developer.android.com/training/basics/activity-lifecycle/starting.html
onResume()
Disebut tepat sebelum aktivitas mulai berinteraksi dengan pengguna. Pada titik ini, aktivitas berada di atas tumpukan aktivitas, dengan input pengguna menuju ke sana. Selalu diikuti olehonPause()
.onPause()
Disebut ketika sistem akan memulai kembali aktivitas lain. Metode ini biasanya digunakan untuk melakukan perubahan yang belum disimpan ke data persisten, menghentikan animasi dan hal-hal lain yang mungkin menghabiskan CPU, dan sebagainya. Ini harus melakukan apa pun yang dilakukannya dengan sangat cepat, karena aktivitas selanjutnya tidak akan dilanjutkan sampai kembali. Diikuti olehonResume()
jika aktivitas kembali ke depan, atau olehonStop()
jika menjadi tidak terlihat oleh pengguna.sumber
Tidak yakin apakah ini dianggap sebagai jawaban - tetapi di sini ada Video YouTube Dari Google's Course (Mengembangkan Aplikasi Android dengan Kotlin) yang menjelaskan perbedaannya.
sumber