以下記錄 MainActivity通過startActivityForResult
跳轉(zhuǎn)到B, 再由B跳轉(zhuǎn)回來, MainActivity的生命周期方法以及 onSaveInstanceState/onRestoreInstanceState, onActivityResult的調(diào)用情況:
正常情況
跳轉(zhuǎn)后MainActivity未被回收
初始化
MainActivity onCreate: Bundle==null
MainActivity onStart
MainActivity onResume
跳轉(zhuǎn)
MainActivity onPause
MainActivity onSaveInstanceState
MainActivity onStop
回退
MainActivity onActivityResult
MainActivity onRestart
MainActivity onStart
MainActivity onResume
異常情況
跳轉(zhuǎn)后MainActivity被回收, 跳轉(zhuǎn)回來又重新初始化
初始化
MainActivity onCreate: Bundle==null
MainActivity onStart
MainActivity onResume
跳轉(zhuǎn)
MainActivity onPause
MainActivity onSaveInstanceState //此處保存狀態(tài)
MainActivity onStop
MainActivity onDestroy
回退
MainActivity onCreate: Bundle!=null //此處恢復(fù)之前保存的狀態(tài)
MainActivity onStart
MainActivity onRestoreInstanceState: Bundle!=null //此處bundle跟onCreate傳入的bundle是同一個對象, 亦可恢復(fù)狀態(tài)
MainActivity onActivityResult //在兩個狀態(tài)恢復(fù)結(jié)點(onCreate 和 onRestoreInstanceState)之后調(diào)用
MainActivity onResume
關(guān)鍵就是看onActivityResult
的前后兩種狀況下調(diào)用時機(jī)的變化, 可以確認(rèn)的是, 在跳轉(zhuǎn)后前一個頁面被回收的情況下, 再回到前一個頁面, onActivityResult
依然會被調(diào)用, 而且是在onCreate
和 onRestoreInstanceState
兩個狀態(tài)恢復(fù)結(jié)點之后調(diào)用, 所以只要做好狀態(tài)的保存和恢復(fù)工作, 就不用擔(dān)心在onActivityResult
回調(diào)時 因相關(guān)數(shù)據(jù)丟失而造成的異常了.