จะทราบได้อย่างไรว่าแอปพลิเคชัน Android ถูกบังคับให้ปิด?

ฉันต้องตรวจสอบว่าแอปพลิเคชันของฉันถูกบังคับให้ปิด ขัดข้อง หรือยุติตามปกติหรือไม่ คำถามของฉันคือ: คุณจะทำสิ่งนั้นในสภาพแวดล้อม Android ได้อย่างไร การจัดการข้อยกเว้นเป็นเรื่องง่าย ฉันเพียงแค่ต้องแทนที่ Thread.setDefaultExceptionHandler เท่านั้น ส่วนที่ยากคือ: ฉันจะแยกแยะการบังคับปิดเครื่องจาก "ปกติ" ได้อย่างไร (เช่น การกดปุ่มย้อนกลับ หรือปุ่มโฮม + เวลานาน ฯลฯ)

เหตุผลก็คือ: เราสามารถซิงโครไนซ์เนื้อหาของฐานข้อมูลท้องถิ่นกับเซิร์ฟเวอร์ได้ และเรามีเหตุผลที่ดีที่จะอนุญาตการดำเนินการนี้ เฉพาะในสถานะ 1 ของกิจกรรมหลัก และไม่ได้อยู่ในสถานะ 2 อย่างไรก็ตาม หากผู้ใช้พบข้อผิดพลาดทางความหมายที่เกี่ยวข้องกับ db ในโปรแกรม ในสถานะ 2 ของกิจกรรมหลัก แล้วเขาหรือเธอก็สามารถติดอยู่ที่นั่นได้

เราเตรียมพร้อมสำหรับการหยุดชะงักของสายเรียกเข้าและการเปลี่ยนแปลงการกำหนดค่าอื่นๆ ดังนั้น หากแอปพลิเคชันติดอยู่ในสถานะ 2 การบังคับปิดแอปแล้วเปิดใหม่อีกครั้ง จะยังคงปล่อยให้ผู้ใช้อยู่ในระยะที่ 2 แทนที่จะเป็นระยะที่ 1

ดังนั้นเราจึงต้องการทิ้งทางสำหรับผู้ใช้ หลังจากที่บังคับปิดแล้วเพื่อกลับเข้าสู่ขั้นตอนที่ 1 และสามารถซิงโครไนซ์ฐานข้อมูลได้ ดังนั้นงานส่วนใหญ่ของเขาหรือเธอจึงสามารถบันทึกได้


person Hegi    schedule 17.07.2013    source แหล่งที่มา


คำตอบ (2)


น่าเสียดายที่ไม่มีทาง เมื่อผู้ใช้หรือระบบบังคับหยุดแอปพลิเคชัน กระบวนการทั้งหมดก็จะถูกฆ่า ไม่มีการโทรกลับเพื่อแจ้งให้คุณทราบว่าสิ่งนี้เกิดขึ้น แม้แต่ onDestroy() ก็ไม่รับประกันว่าจะถูกเรียก ซึ่งมีระบุไว้ในเอกสารประกอบ: "There are situations where the system will simply kill the activity's hosting process without calling this method (or any others) in it ..."

person Oleksandr Karaberov    schedule 17.07.2013
comment
แล้ว getRuntime().addShutdownHook หรืออะไรทำนองนั้นล่ะ ฉันรู้ว่า on Android, the application lifecycle does not include VM termination, so calling this method will not ensure that your code is run แต่ไม่มีใครบอกฉันว่าจะถูกเรียกเมื่อใด... ไม่มีวิธีใดที่ฉันสามารถใช้ได้? - person Hegi; 17.07.2013
comment
@Hegi อย่างที่ฉันบอกไปแล้วว่าไม่มีวิธีที่รับประกันและไม่มีวิธีการสำหรับจุดประสงค์นี้ - person Oleksandr Karaberov; 17.07.2013

บางทีคุณอาจเขียนไฟล์เมื่อเริ่มต้นระบบซึ่งคุณลบออกเมื่อปิดเครื่อง หากแอปเริ่มทำงานและมีไฟล์นี้อยู่ คุณสามารถสรุปได้ว่าแอปนั้นถูกบังคับปิด

person Brad    schedule 17.07.2013
comment
เพื่อให้คำตอบนี้ถูกต้องคุณควรกำหนดการปิดระบบบนระบบปฏิบัติการ Android - person Selvin; 17.07.2013
comment
นี่เป็นความคิดเริ่มแรกของฉัน แต่ตามที่กล่าวไว้ข้างต้น วิธีเดียวที่รับประกันซึ่งเรียกว่า onPause และน่าเสียดายที่วิธีนี้ก็ถูกเรียกเช่นกัน เมื่อผู้ใช้กดปุ่มโฮม - person Hegi; 17.07.2013