Bagaimana Activity.finish () bekerja di Android?

Jawaban:

123

Apakah itu segera keluar atau menyelesaikan fungsi dari mana ia dipanggil?

Metode yang dipanggil finish()akan berjalan sampai selesai. The finish()operasi bahkan tidak akan dimulai sampai Anda kembali kontrol untuk Android.

CommonsWare
sumber
3
Lalu bagaimana cara menyelesaikan suatu aktivitas yang dipanggil oleh StartAvtivityforResults () tanpa penyelesaian?
Ayush Pateria
@CommonsWare Bagaimana kami dapat memastikan bahwa onStop selalu dipanggil? Dalam aplikasi saya, OnStop dan onDestroy tidak dipanggil dalam beberapa kasus dan dalam kasus tersebut aktivitas anak membutuhkan terlalu banyak waktu dalam penyelesaian dan sepertinya Aplikasi telah hang ... Sedangkan ketika onStop dipanggil semuanya berfungsi normal. Saya menggunakan Galaxy y dengan Android 2.3.6 ... lihat pertanyaan saya di stackoverflow.com/questions/13928591/… tolong bantu !!!
Amit
@CommonsWare Saya menguji Pak sangat benar. +1 untuk Anda Tapi saya ingin mengajukan satu pertanyaan yang saya tulis finish () sebagai pernyataan pertama dalam fungsi saya kemudian menjalankan seluruh fungsi dan kemudian finish () disebut Bagaimana ini dikelola.
Nikhil Agrawal
@NikhilAgrawal, Anda dapat meminta fungsi Anda kembali tepat setelah finish () dipanggil.
antonio081014
Apakah finish () juga memanggil onPause () dan onStop () sebelum memanggil onDestroy ()?
sr09
20

Setiap siklus hidup acara seperti onCreate, onResume, onPause.... onDestroydari sebuah Kegiatan selalu disebut di thread tunggal - The "benang Utama".

Singkatnya, utas ini didukung oleh Antrean tempat semua acara aktivitas diposting. Utas ini dapat menjalankan semua acara ini dalam urutan penyisipan.

Jika Anda memanggil finish()salah satu callback siklus hidup seperti onCreate()... pesan "selesai" akan ditambahkan ke antrean ini tetapi utas tidak bebas untuk memilih & menjalankan tindakan "selesai" hingga metode yang sedang dijalankan kembali yaitu Utas dibebaskan dari tugas saat ini.

pengguna3688593
sumber
13

ondestroy() adalah panggilan terakhir yang Anda terima sebelum aktivitas Anda dimusnahkan.

Hal ini dapat terjadi baik karena aktivitas sedang selesai (seseorang memanggilnya finish() , atau karena sistem untuk sementara menghancurkan instance aktivitas ini untuk menghemat ruang. Anda dapat membedakan antara dua skenario ini dengan isFinishing() metode.

pengguna284295
sumber
1

Jika ada dua aktivitas A dan B. Dan aliran Anda mengalir dari A> B; dan B = A panggilan finish().

Kemudian,

Metode tempat Anda memanggil finish()akan dijalankan seperti yang disebutkan Mark. Dan aliran panggilan balik akan diikuti -

  1. onPause() dari activity A
  2. onRestart()> onStart()> onResume()Kegiatan B
  3. Kemudian, muncul perbedaan yang nyata. Jika Anda tidak menelepon finish()dari activity A; hanya onStop()dari Activity Aakan disebut di sini. Sementara, dalam hal ini, di mana kita dipanggil finish()dari Activity A; Jadi onStop()dan onDestroy()keduanya akan dipanggil activity A.
Darpan
sumber