Activity的三个方法:
onCreate 创建Activity。savedInstanceState:是之前异常销毁时保存的对象,一般未处理时及初次加载Activity时,为null
onSaveInstanceState 由系统销毁Activity(可能内存不足,屏幕改变且未做处理导致异常等原因),而触发
onRestoreInstanceState 由系统恢复刚刚销毁的Activity时,而触发
在api21之后,以上三个方法都出了一个带有参数类型为PersistableBundle的重载方法。
PersistableBundle,就是一个可持久化的 Bundle。
其行为解释如下:
private boolean mFlag;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (savedInstanceState != null) {
//boolean flag = savedInstanceState.getBoolean("key");
}
}
/*
PersistableBundle API 21 出现
在manifest中 <activity android:persistableMode="persistAcrossReboots" /> 配置 前面的属性,
以使activity有了持久化的能力。
这个属性值用的较多,即在关机重启导致异常时,也会被触发
其它属性:
persistNever 不持久化Activity
persistRootOnly 默认值,仅响应在app的根activity中;
但不能在重启时接收一个PersistableBundle对象;
所以即使配置了,也仅是相当于,
仅有一个 "Bundle savedInstanceState"参数函数的作用
*/
@TargetApi(21)
@Override
public void onCreate(@Nullable Bundle savedInstanceState,
@Nullable PersistableBundle persistentState) {
super.onCreate(savedInstanceState, persistentState);
}
@TargetApi(21)
@Override
public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState) {
super.onSaveInstanceState(outState, outPersistentState);
if (VERSION.SDK_INT >= VERSION_CODES.LOLLIPOP) {
outPersistentState.putInt("i_key", 0);
}
}
@Override
protected void onSaveInstanceState(Bundle outState) {
outState.putBoolean("key", true);
super.onSaveInstanceState(outState);
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
this.mFlag = savedInstanceState.getBoolean("key", false);
}
@TargetApi(21)
@Override
public void onRestoreInstanceState(Bundle savedInstanceState, PersistableBundle persistentState) {
super.onRestoreInstanceState(savedInstanceState, persistentState);
}
上面PersistableBundle的使用未具体列出,其用法基本与 Bundle是一样的。