คำถามนี้เก่า แต่มีคำตอบสำหรับคำถามนี้ที่ไม่ต้องการ adb, Android Studio เป็นต้นข้อกำหนดเพียงอย่างเดียวคือ API 23 หรือใหม่กว่า
ในการจำลองการรีสตาร์ทแอพโดยระบบปฏิบัติการให้ไปที่การตั้งค่าแอพขณะที่แอพของคุณกำลังทำงานปิดการใช้งาน (จากนั้นคุณสามารถเปิดใช้งาน) การอนุญาตและส่งคืนแอพจากแอพล่าสุด เมื่อปิดใช้งานการอนุญาตระบบปฏิบัติการจะฆ่าแอป แต่เก็บสถานะอินสแตนซ์ที่บันทึกไว้ เมื่อผู้ใช้ส่งคืนแอปแอปและกิจกรรมล่าสุด (พร้อมสถานะที่บันทึก) จะถูกสร้างขึ้นใหม่
บางครั้งวิธีการ 'ไม่มีกระบวนการพื้นหลัง' ทำให้เกิดพฤติกรรมเดียวกัน แต่ไม่เสมอไป ตัวอย่างเช่นหากแอปกำลังเรียกใช้บริการพื้นหลัง "ไม่มีกระบวนการพื้นหลัง" ไม่ทำอะไรเลย แต่แอปสามารถถูกฆ่าโดยระบบรวมถึงบริการของมัน วิธีการอนุญาตใช้งานได้แม้ว่าแอปจะมีบริการก็ตาม
ตัวอย่าง:
แอพของเรามีสองกิจกรรม ActivityA เป็นกิจกรรมหลักที่เริ่มต้นจากตัวเรียกใช้ ActivityB เริ่มต้นจาก ActivityA ฉันจะแสดงเฉพาะวิธีการสร้าง, onStart, onStop, onDestroy Android เรียกร้องให้ SaveInstanceState เสมอก่อนที่จะเรียก onStop เพราะกิจกรรมที่อยู่ในสถานะหยุดสามารถถูกฆ่าโดยระบบ [ https://developer.android.com/reference/android/app/Activity.html#ActivityLifecycle]
วิธีการอนุญาต:
<start app from launcher first time>
Application onCreate
ActivityA onCreate WITHOUT savedInstance
ActivityA onStart
<open ActivityB>
ActivityB onCreate WITHOUT savedInstance
ActivityB onStart
ActivityA onStop (the order is like this, it is stopped after new one is started)
<go settings>
ActivityB onStop
<disable a permission>
//Application is killed, but onDestroy methods are not called.
//Android does not call onDestroy methods if app will be killed.
<return app by recent apps>
Application onCreate (this is the important part. All static variables are reset.)
ActivityB onCreate WITH savedInstance (user does not notice activity is recreated)
//Note that ActivityA is not created yet, do not try to access it.
ActivityB onStart
<return ActivityA by back>
ActivityA onCreate WITH savedInstance (user does not notice activity is recreated)
ActivityA onStart
ActivityB onStop
ActivityB onDestroy
<press back again, return launcher>
ActivityA onStop
ActivityA onDestroy
<open app again>
//does not call Application onCreate, app was not killed
ActivityA onCreate WITHOUT savedInstance
ActivityA onStart
ฉันต้องการเปรียบเทียบวิธีอื่น ๆ ที่กล่าวถึงในคำตอบอื่น ๆ
อย่าเก็บกิจกรรม: สิ่งนี้ไม่ได้ฆ่าแอปพลิเคชัน
<start app from launcher first time>
Application onCreate
ActivityA onCreate WITHOUT savedInstance
ActivityA onStart
<open ActivityB>
ActivityB onCreate WITHOUT savedInstance
ActivityB onStart
ActivityA onStop
ActivityA onDestroy (do not keep)
<return launcher by home button>
ActivityB onStop
ActivityB onDestroy (do not keep)
<retun app from recent apps>
// NO Application onCreate
ActivityB onCreate WITH savedInstance (user does not notice activity recreated)
ActivityB onStart
<return ActivityA by back>
ActivityA onCreate WITH savedInstance (user does not notice activity recreated)
ActivityA onStart
ActivityB onStop
ActivityB onDestroy
<press back again, return launcher>
ActivityA onStop
ActivityA onDestroy
<open app again>
//does not call Application onCreate, app was not killed
ActivityA onCreate WITHOUT savedInstance
ActivityA onStart
วิธีบังคับหยุด: ไม่เก็บสถานะอินสแตนซ์ที่บันทึกไว้
<start app from launcher first time>
Application onCreate
ActivityA onCreate WITHOUT savedInstance
ActivityA onStart
<open ActivityB>
ActivityB onCreate WITHOUT savedInstance
ActivityB onStart
ActivityA onStop
<go settings>
ActivityB onStop
<force stop, return app from recent apps>
Application onCreate
ActivityA onCreate WITHOUT savedInstance
//This is important part, app is destroyed by user.
//Root activity of the task is started, not the top activity.
//Also there is no savedInstance.