Android oncreate(Bundle savedInstanceState, PersistableBundle persistentState)作用

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是一样的。

猜你喜欢

转载自blog.csdn.net/jjwwmlp456/article/details/78035906
今日推荐