ใครช่วยให้คำอธิบายว่าเกิดอะไรขึ้นเมื่อActivity
เรียกfinish()
ใช้วิธีนี้
มันออกทันทีหรือไม่หรือทำหน้าที่ที่เรียกว่าเสร็จสมบูรณ์?
ใครช่วยให้คำอธิบายว่าเกิดอะไรขึ้นเมื่อActivity
เรียกfinish()
ใช้วิธีนี้
มันออกทันทีหรือไม่หรือทำหน้าที่ที่เรียกว่าเสร็จสมบูรณ์?
คำตอบ:
มันออกทันทีหรือเสร็จสิ้นฟังก์ชันที่เรียกว่า?
เมธอดที่เรียกfinish()
จะทำงานจนเสร็จสิ้น การfinish()
ดำเนินการจะไม่เริ่มต้นจนกว่าคุณจะกลับสู่การควบคุม Android
ทุกเหตุการณ์วงจรชีวิตเช่นonCreate
, onResume
, onPause
.... onDestroy
ของกิจกรรมอยู่เสมอเรียกว่าเส้นเดียว - "การหัวข้อหลัก"
ในระยะสั้นเธรดนี้ได้รับการสนับสนุนโดยคิวที่มีการโพสต์กิจกรรมกิจกรรมทั้งหมด เธรดนี้สามารถรันเหตุการณ์เหล่านี้ทั้งหมดตามลำดับการแทรก
หากคุณกำลังเรียกใช้finish()
หนึ่งในการเรียกกลับของวงจรชีวิตเช่นonCreate()
... ข้อความ "เสร็จสิ้น" จะถูกเพิ่มลงในคิวนี้ แต่เธรดนั้นไม่มีอิสระในการเลือกและดำเนินการแอคชัน "เสร็จสิ้น" จนกว่าการเรียกใช้เมธอดในขณะนี้จะคืนค่านั่นคือเธรดถูกปลดปล่อยจาก งานปัจจุบัน
ondestroy()
เป็นสายสุดท้ายที่คุณได้รับก่อนที่กิจกรรมของคุณจะถูกทำลาย
สิ่งนี้อาจเกิดขึ้นได้เนื่องจากกิจกรรมกำลังจะเสร็จสิ้น (มีคนเรียกfinish()
ใช้หรือเนื่องจากระบบกำลังทำลายอินสแตนซ์ของกิจกรรมนี้ชั่วคราวเพื่อประหยัดพื้นที่คุณสามารถแยกแยะความแตกต่างระหว่างสองสถานการณ์นี้ด้วยisFinishing()
วิธีการ
หากมีสองกิจกรรม A และ B และโฟลว์ของคุณกำลังไปจาก A> B; และ B = finish()
สาย
จากนั้น
วิธีการที่คุณเรียกfinish()
จากจะดำเนินการตามที่ Mark กล่าวถึง และขั้นตอนการโทรกลับจะเป็นดังนี้ -
onPause()
ของ activity A
onRestart()
> onStart()
> onResume()
กิจกรรม Bfinish()
จากactivity A
; เพียง แต่onStop()
ของActivity A
จะถูกเรียกว่าที่นี่ ในขณะที่ในกรณีนี้ที่เราเรียกว่าfinish()
จากActivity A
; ดังนั้นonStop()
และทั้งสองจะได้รับการเรียกร้องให้onDestroy()
activity A