我正在開發一個Android應用程序,正如預期的那樣,有些情況下我的代碼崩潰了(bug,空指針等)。當應用程序崩潰時會發生什麼?
當應用程序崩潰時,它會重新啓動自身,即使我沒有編寫任何代碼來執行它(我想這是默認行爲?!),但問題是,應用程序以不正確的狀態打開。
這裏是當應用程序啓動時什麼一般情況:
- 最初,該應用程序帶有「閃屏」打開。該屏幕嘗試使用共享首選項中的持久性令牌對用戶進行身份驗證,並從服務器加載一些默認值並將其保留在某些服務中。
- 根據登錄成功,它會轉到主屏幕或登錄屏幕。
當應用程序正常啓動,這一切工作正常,並如預期的那樣執行初始化序列但是當它重新啓動作爲碰撞的結果,將已經填充在啓動畫面片段中的值(例如作爲登錄用戶或從服務器加載默認值)都是無效的,這意味着它們從不執行。
這使我相信,應用程序重新啓動時的事件序列是完全錯誤的,即不是使用正確的活動重新啓動應用程序,而是在清單中指定爲啓動器,它似乎會錯誤地重新啓動事物並從錯誤的活動。
所以,這裏的問題是:什麼決定了我的應用程序應該在發生崩潰時自行重啓,以及決定應該如何啓動?當應用程序從崩潰中啓動時,是否有任何事件可以捕獲,以便我可以覆蓋初始化序列?有沒有辦法強制應用始終從啓動器活動開始?
提前許多感謝,
只是添加一些信息,你可以通過調用:android.os.Process.killProcess(android.os.Process.myPid())來防止再次打開應用程序。 System.exit(0) 在全局Thread.UncaughtExceptionHanlder中。我不知道這是多麼正確(可能不多)。但我真的很想知道應用程序在這些場景中應該如何表現 – JML 2014-11-04 19:32:25
非常感謝JML。這確實有幫助;不過,我應該提及,我並不特別介意重新啓動應用程序,我希望儘可能保持與Android生態系統的「標準方式」接近,這似乎是操作系統自動重新啓動應用程序。然而,我希望它在通過尊重啓動器標誌重新啓動時運行正確,或者至少讓我能夠覆蓋初始化序列。再次,非常感謝您的建議。 – kha 2014-11-04 19:36:09