Android 组件提供的状态保存(saveInstanceState)与恢复(restoreInstanceState)

Android的组件Activity中,有这样一对方法: onSaveInstanceeStateonRestoreInstanceState

这两对方法,可以让我在Activiy异常销毁时,保存状态;以及在Activity重建时,恢复状态。

比如:当我们在输入框中输入了内容,此时因为种种原因,将App退至了后台。这个处于后台的App很有可能因为内存不足、其他配置,被系统杀死。

当我们恢复这个页的时候,希望它能够保存住我们原来输入的内容。

除了,我们自己手动保存,也可以利用系统的onSaveInstanceStateonRestoreInstanceState

那么,在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
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值