onRestoreInstanceState用來在乎外中斷時恢復保存的數據,onSaveInstanceState在乎外中斷時保存數據。這2個方法的使用是有條件的,所以,咱們須要明白這2個方法觸發的條件。spa
1. 只要Activity不finish,Activity進入後臺(好比Home鍵、電源鍵、跳轉到其餘的Activity),則其就會調用onSaveInstanceState(Bundle outState)方法,並且這個方法是在onPause方法之間進行調用的。進程
二、屏幕旋轉it
1. 若是Activity是執行了finish方法,才進入的後臺,則不調用這個onSaveInstanceState(Bundle outState),並且下次再進入時,也不會使用這個保存的數據。後臺
2. 在系統殺掉Activity所在的進程時,onSaveInstanceState(Bundle outState)方法根本就沒有調用過。方法
onSaveInstanceState被調用是爲了保存數據,然而這並不意味着onRestoreInstanceState會被調用,那麼,何時會被調用呢。總結
場景一:當前ActivityA啓動了ActivityB時onSaveInstanceState會被調用,也就是說activityA狀態被保存了,ActivityA被壓在棧中了,只有ActivityB活躍着,據此暗示,當ActivityB發生意外異常,只致使ActivityB被Kill後,ActivityA沒有被kill時,這是ActivityA會再次重建,在此次重建過程當中纔會調用本身的onRestoreInstanceState。數據
場景二:進程重啓,咱們發現進程重啓的過程也會調用onRestoreInstanceState異常
場景三:屏幕旋轉、致使Activity重啓activity
因此得出以下條件:vi
條件一:當前Activity所在棧的上一層Activity發生警告性,低級別異常,致使上一層棧中的activity被kill後致使Activity重啓。
條件二:當前的App進程重啓
條件三:屏幕旋轉
總結:Activity所在的進程的Activity從新啓動(好比屏幕切換,進程被異常kill後的重啓過程當中會同時調用OnRestoreInstance和onSaveInstanceState)