在Android
的组件Activity
中,有这样一对方法: onSaveInstanceeState
和 onRestoreInstanceState
这两对方法,可以让我在Activiy
被异常销毁时,保存状态;以及在Activity
重建时,恢复状态。
比如:当我们在输入框中输入了内容,此时因为种种原因,将App退至了后台。这个处于后台的App很有可能因为内存不足、其他配置,被系统杀死。
当我们恢复这个页的时候,希望它能够保存住我们原来输入的内容。
除了,我们自己手动保存,也可以利用系统的onSaveInstanceState
和onRestoreInstanceState
那么,在Android已有的系统中,是如何做的呢?
我们查阅EditText,发现它的父类TextView做了保存状态与恢复状态的处理,但是根据条件(freezesText || hasSelection
)做了保存与恢复,如果只用TextView用于展示,并不会触发保存与恢复。
TextView的状态保存与恢复。
// 保存状态
@Override
public Parcelable onSaveInstanceState() {
Parcelable superState = super.onSaveInstanceState();
// Save state if we are forced to
final boolean freezesText = getFreezesText();
boolean hasSelection = false;
int start = -1;
int end = -1;
if (mText != null) {
start = getSelectionStart();
end = getSelectionEnd();
if (start >= 0 || end >= 0) {
// Or save state if there is a selection
hasSelection = true;
}
}
// 满足此条件时,才进行保存数据
if (freezesText || hasSelection) {
SavedState ss = new SavedState(superState);
if (freezesText) {
if (mText instanceof Spanned