以下记录 MainActivity通过startActivityForResult
跳转到B, 再由B跳转回来, MainActivity的生命周期方法以及 onSaveInstanceState/onRestoreInstanceState, onActivityResult的调用情况:
正常情况
跳转后MainActivity未被回收
初始化
MainActivity onCreate: Bundle==null
MainActivity onStart
MainActivity onResume
跳转
MainActivity onPause
MainActivity onSaveInstanceState
MainActivity onStop
回退
MainActivity onActivityResult
MainActivity onRestart
MainActivity onStart
MainActivity onResume
异常情况
跳转后MainActivity被回收, 跳转回来又重新初始化
初始化
MainActivity onCreate: Bundle==null
MainActivity onStart
MainActivity onResume
跳转
MainActivity onPause
MainActivity onSaveInstanceState //此处保存状态
MainActivity onStop
MainActivity onDestroy
回退
MainActivity onCreate: Bundle!=null //此处恢复之前保存的状态
MainActivity onStart
MainActivity onRestoreInstanceState: Bundle!=null //此处bundle跟onCreate传入的bundle是同一个对象, 亦可恢复状态
MainActivity onActivityResult //在两个状态恢复结点(onCreate 和 onRestoreInstanceState)之后调用
MainActivity onResume
关键就是看onActivityResult
的前后两种状况下调用时机的变化, 可以确认的是, 在跳转后前一个页面被回收的情况下, 再回到前一个页面, onActivityResult
依然会被调用, 而且是在onCreate
和 onRestoreInstanceState
两个状态恢复结点之后调用, 所以只要做好状态的保存和恢复工作, 就不用担心在onActivityResult
回调时 因相关数据丢失而造成的异常了.