前一个页面被回收,再初始化后onActivityResult还调用吗?

以下记录 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依然会被调用, 而且是在onCreateonRestoreInstanceState两个状态恢复结点之后调用, 所以只要做好状态的保存和恢复工作, 就不用担心在onActivityResult回调时 因相关数据丢失而造成的异常了.

推荐阅读更多精彩内容