Activity.finish () Android'de nasıl çalışır?


Yanıtlar:


123

Hemen çıkıyor mu yoksa çağrıldığı işlevi tamamlıyor mu?

Çağrılan yöntem finish()tamamlanana kadar çalışacaktır. finish()Eğer Android'e kontrolünü dönünceye kadar operasyon bile başlamaz.


3
O halde StartAvtivityforResults () tarafından adlandırılan bir aktivite tamamlanmadan nasıl bitirilir?
Ayush Pateria

@CommonsWare onStop'un her zaman çağrıldığından nasıl emin olabiliriz? Uygulamamda OnStop ve onDestroy bazı durumlarda çağrılmıyor ve bu durumlarda çocuk etkinliği bitirmek için çok fazla zaman alıyor ve bu Uygulama askıda kalmış gibi görünüyor ... Oysa onStop çağrıldığında her şey normal çalışıyor. Android 2.3.6 ile Galaxy y'deyim ... stackoverflow.com/questions/13928591/… adresinde soruma bakın plz yardım !!!
Amit

@CommonsWare Test ettim efendim çok doğru. + 1 Sizin için Ama fonksiyonumda ilk ifade olarak finish () yazdığım bir soruyu sormak istiyorum, sonra tüm fonksiyonu çalıştırıyor ve ardından finish () nasıl yönetiliyor.
Nikhil Agrawal

@NikhilAgrawal, finish () çağrıldıktan hemen sonra işlevinizin geri dönmesini sağlayabilirsiniz.
antonio081014

Finish (), onDestroy () 'u çağırmadan önce onPause () ve onStop ()' u da çağırır mı?
sr09

20

Gibi her yaşam döngüsü olayı onCreate, onResume, onPause.... onDestroy"Ana iş parçacığı" - Bir Faaliyet her zaman tek iş parçacığı üzerinde denir.

Kısaca bu iş parçacığı, tüm etkinlik olaylarının gönderildiği bir Kuyruk tarafından desteklenir. Bu iş parçacığı, tüm bu olayları yerleştirme sırasına göre yürütebilir.

... finish()gibi yaşam döngüsü geri aramalarından birinde arama yapıyorsanız, onCreate()bu kuyruğa bir "bitiş" mesajı eklenir, ancak iş parçacığı, şu anda çalıştırılan yöntem geri dönene kadar "bitiş" eylemini seçip yürütmek için serbest değildir, yani İş Parçacığı serbest bırakılır mevcut görev.


13

ondestroy() faaliyetiniz yok edilmeden önce aldığınız son çağrıdır.

Bu, ya etkinlik bittiği için (birisi çağrıldığı finish() için ya da sistem yerden kazanmak için bu etkinlik örneğini geçici olarak yok ettiği için olabilir. Bu iki senaryoyu isFinishing() yöntemle ayırt edebilirsiniz .


1

A ve B olmak üzere iki aktivite varsa ve akışınız A> B'den gidiyorsa; ve B = A çağrıları finish().

Sonra,

Çağrdığınız yöntem finish()Mark'ın bahsettiği gibi çalışacaktır. Ve geri arama akışı şu şekilde olacaktır -

  1. onPause() nın-nin activity A
  2. onRestart()> onStart()> onResume()Etkinliği B
  3. Ardından gerçek fark gelir. Dan finish()aramadıysanız activity A; burada sadece onStop()biri Activity Aaranacak. Ederken, denilen bu durumda, içinde finish()gelen Activity A; Yani onStop()ve onDestroy()her ikisi için çağrılır activity A.
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.