公司項目的某個業務,須要在整個業務操做流程中保存一些數據,咱們採用了單例模式來保存這些數據,而後在 整個業務流程中隨時取用。正常操做的狀況下是沒有問題的,可是在bugly異常上報中,出現了不少在後臺拉起App 時,出現空指針Crash的問題。經檢查,發現是App被異常殺死後,從新建立App時單例對象中的數據爲空致使的。git
Activity中可能存在這樣兩種數據(包含狀態):github
以上兩種類型的數據有個共同的特色,即並不須要超長時間的持久化保存,而且只有在非正常操做時才須要保存,而後在App被後臺異常殺死後重建Activity時,才須要從新拿到並使用。學習
Activity提供了相應的保存狀態和恢復狀態的回調方法。指針
以上的方法均是Activity生命週期回調方法,在異常行爲發生時,Activity自動回調相應方法。code
onSaveInstanceState(Bundle)
把數據往bundle中放,bundle的使用相似Map,以鍵值對的形式保存數據。onCreate(Bundle)
或onRestoreInstanceState(Bundle)
從bundle把數據取出來,而後恢復數據。onSaveInstanceState(Bundle)
對象
onPause()
以後,onStop()
以前被觸發finish()
方法關閉Activity時不回調該方法A.onPause()
->B.onCreate()
->B.onStart()
->B.onResume()
->A.onSaveInstanceState()
->A.onStop
。這裏其實至關於給每個Activity提供了一個在程序退到後臺時保存狀態的時機。但實際又是提早保存的狀態。onPause()
->onSaveInstanceState()
->onStop()
onCreate(Bundle)
或onRestoreInstanceState(Bundle)
生命週期