android activity缓存,安卓学习笔记------Activity缓存

一、onSaveInstanceState (Bundle outState)保存状态

Activity中的onSaveInstanceState()回调方法用于保存临时数据和状态,这个方法会在活动被回收之前调用。

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

//Acivity第一次被创建的时候为空,所以需要判断空操作

if( savedInstanceState != null ){

savedInstanceState.getString("test");

}

}

@Override

protected void onSaveInstanceState(Bundle outState) {

super.onSaveInstanceState(outState);

outState.putString("test","Android");

}

onSaveInstanceState方法会在以下情况下执行:

1、当用户按下HOME键时。

2、长按HOME键,选择运行其他的程序时。

3、关闭屏幕显示时。

4、从activity A中启动一个新的activity时。

5、屏幕方向切换时

使用onSaveInstanceState方法需要注意的几点:

1.布局中的每一个View默认实现了onSaveInstanceState()方法,这样的话,这个UI的任何改变都会自动地存储和在activity重新创建的时候自动地恢复。但是这种情况只有在你为这个UI提供了唯一的ID之后才起作用,如果没有提供ID,app将不会存储它的状态。

2.由于默认的onSaveInstanceState()方法的实现帮助UI存储它的状态,所以如果需要覆盖这个方法去存储额外的状态信息,应该在执行任何代码之前都调用父类的onSaveInstanceState()方法(super.onSaveInstanceState())。 如果自己的派生类中有变量影响到UI,或你程序的行为,就要把这个变量也保存了,那么就需要自己实现,否则就不需要。

3.由于onSaveInstanceState()方法调用的不确定性,应该只使用这个方法去记录activity的瞬间状态(UI的状态)。不应该用这个方法去存储持久化数据。当用户离开这个activity的时候应该在onPause()方法中存储持久化数据(例如应该被存储到数据库中的数据)。

4.onSaveInstanceState()如果被调用,这个方法会在onStop()前被触发,但系统并不保证是否在onPause()之前或者之后触发。

二、onRestoreInstanceState (Bundle outState)恢复

onRestoreInstanceState被调用的前提是,activity 确实被系统销毁了,否则该方法不会被调用。

另外,onRestoreInstanceState的bundle参数也会传递到onCreate方法中,也可以选择在onCreate方法中做数据还原。

@Override

public void onSaveInstanceState(Bundle savedInstanceState) {

savedInstanceState.putBoolean("mBoolean", true);

savedInstanceState.putString("mString", "Hello World");

super.onSaveInstanceState(savedInstanceState);

}

@Override

public void onRestoreInstanceState(Bundle savedInstanceState) {

super.onRestoreInstanceState(savedInstanceState);

boolean myBoolean = savedInstanceState.getBoolean("mBoolean");

String myString = savedInstanceState.getString("mString");

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值