公司项目的某个业务,须要在整个业务操做流程中保存一些数据,咱们采用了单例模式来保存这些数据,而后在 整个业务流程中随时取用。正常操做的状况下是没有问题的,可是在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)
生命周期