写在这之前,先看一下官方文档的描述:

管理 Activity 生命周期的引言部分简要提及,当 Activity 暂停或停止时,Activity 的状态会得到保留。 确实如此,因为当 Activity 暂停或停止时,ActivityActivity 对象也会被销毁,因此系统在继续 Activity 时根本无法让其状态保持完好,而是必须在用户返回 Activity 时重建 Activity 对象。但用户并不知道系统销毁 Activity 后又对其进行了重建,因此他们很可能认为 Activity 状态毫无变化。 在这种情况下,您可以实现另一个回调方法对有关 Activity 状态的信息进行保存,以确保有关 Activity 状态的重要信息得到保留:onSaveInstanceState()onSaveInstanceState(),然后再使 Activity 变得易于销毁。系统会向该方法传递一个 Bundle,您可以在其中使用 putString() 和 putInt() 等方法以名称-值对形式保存有关 Activity 状态的信息。然后,如果系统终止您的应用进程,并且用户返回您的 Activity,则系统会重建该 Activity,并将 Bundle 同时传递给 onCreate() 和 onRestoreInstanceState()。您可以使用上述任一方法从 Bundle 提取您保存的状态并恢复该 Activity 状态。如果没有状态信息需要恢复,则传递给您的 Bundle 通过一个例子来说明其在生命周期中的位置(竖屏转为横屏):

10-11 10:01:29.827 10128-10128/com.bole.perfect D/debug: -->onCreate
 10-11 10:01:29.833 10128-10128/com.bole.perfect D/debug: -->onStart
 10-11 10:01:29.835 10128-10128/com.bole.perfect D/debug: -->onResume

横屏

10-11 10:01:32.000 10128-10128/com.bole.perfect D/debug: -->onSaveInstanceState
 10-11 10:01:32.004 10128-10128/com.bole.perfect D/debug: -->onStop
 10-11 10:01:32.005 10128-10128/com.bole.perfect D/debug: -->onDestroy
 10-11 10:01:32.024 10128-10128/com.bole.perfect D/debug: -->onCreate
 10-11 10:01:32.031 10128-10128/com.bole.perfect D/debug: -->onStart
 10-11 10:01:32.031 10128-10128/com.bole.perfect D/debug: -->onRestoreInstanceState
 10-11 10:01:32.033 10128-10128/com.bole.perfect D/debug: -->onResume


重要:在调用 onDestroy 后,该activity中的所有变量都将重置,而布局中的原有值(例如:edittext中的输入值)将会保存(前提是该view设置了 android:id)。

官方文档的说明:

不过,即使您什么都不做,也不实现 onSaveInstanceState()Activity 类的 onSaveInstanceState() 默认实现也会恢复部分 Activity 状态。具体地讲,默认实现会为布局中的每个 View 调用相应的 onSaveInstanceState() 方法,让每个视图都能提供有关自身的应保存信息。Android 框架中几乎每个小部件都会根据需要实现此方法,以便在重建 Activity 时自动保存和恢复对 UI 所做的任何可见更改。例如,EditText 小部件保存用户输入的任何文本,CheckBox 小部件保存复选框的选中或未选中状态。您只需为想要保存其状态的每个小部件提供一个唯一的 ID(通过 android:id 属性)。如果小部件没有 ID,则系统无法保存其状态。注:由于无法保证系统会调用 onSaveInstanceState(),因此您只应利用它来记录 Activity 的瞬态(UI 的状态)— 切勿使用它来存储持久性数据,而应使用 onPause() 在用户离开 Activity 后存储持久性数据(例如应保存到数据库的数据)。