Luis Mendo Luis Mendo - 6 months ago 31
Android Question

When are onSaveInstanceState() and onRestoreInstanceState() called, exactly?

The following figure (from the official doc) describes the well-known lifecycle of an Android activity:

enter image description here

On the other hand, when the activity is destroyed by the system (for example because memory needs to be reclaimed), the state of the activity is sometimes automatically saved and restored by means of the methods

onSaveInstanceState()
and
onRestoreInstanceState()
, as illustrated by the following figure (also from the official doc):

enter image description here

I'm aware that
onSaveInstanceState()
is not always called when an activity is about to be destroyed. For example, if it is destroyed because the user has pressed the "back" button, the activity state is not preserved. But in the cases when the state is saved and restored, and
onSaveInstanceState()
/
onRestoreInstanceState()
get called, when exactly are they called?

For example, according to the above figures,
onRestoreInstanceState()
might be called before
onStart()
, or after
onStart()
but before
onResume()
, or after
onResume()
. Similarly, several possibilities exist for
onSaveInstanceState()
. So when are they called exactly?

Ideally, what I would like is to see a combined diagram showing the activity lifecycle states and the save/restore methods, if that exists.

Answer

Per the documentation:

void onRestoreInstanceState (Bundle savedInstanceState)

This method is called between onStart() and onPostCreate(Bundle).

void onSaveInstanceState (Bundle outState)

If called, this method will occur before onStop(). There are no guarantees about whether it will occur before or after onPause().

It is not defined as to when onSaveInstanceState() may be called, the only guarantee we have is that range.