ใครช่วยให้คำอธิบายว่าเกิดอะไรขึ้นเมื่อ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 AonRestart()> onStart()> onResume()กิจกรรม Bfinish()จากactivity A; เพียง แต่onStop()ของActivity Aจะถูกเรียกว่าที่นี่ ในขณะที่ในกรณีนี้ที่เราเรียกว่าfinish()จากActivity A; ดังนั้นonStop()และทั้งสองจะได้รับการเรียกร้องให้onDestroy()activity A