美文网首页
Android Activity内的两种数据保存

Android Activity内的两种数据保存

作者: 周_0717 | 来源:发表于2021-11-09 16:58 被阅读0次

    Activity内提供保存方式分为onRetainNonConfigurationInstance(以下称为方式R)和onSaveInstanceState(以下称为方式S)两种;

    1. 保存数据的方式、类型、限制:
      方式S和方式R都是先把数据保存在ActivityClientRecord中。方式 S保存在state字段,为Bundle类型;方式R在lastNonConfigurationInstances字段内的activity字段,为Object类型。
      方式R仅在内存中保存,一旦ActivityClientRecord被回收数据就不存在了;方式 S保存的数据(state)会在onStop周期时,通过AIDL的方式传递给ASM保存。同时,这也造成了方式 S保存的数据不能大于(1 * 1024 * 1024) - (4096 * 2) 字节(此大小在ProcessState.cpp中定义: #define BINDER_VM_SIZE ((1 * 1024 * 1024) - (4096 * 2)) )。
    2. 触发保存数据的时机:
      方式R的对应方法会在onDestroy之前根据getNonConfigInstance字段确定是否调用,getNonConfigInstance一般仅在activity执行relaunch操作时为true,暂时未发现有其他情况为true;
      方式S的对应方法在不同target sdk version下,所处生命周期不同:
      1)target sdk version<11:在onPause前;
      2)11<target sdk version<28:在onStop前;
      3)target sdk version>=28:在onStop后;
    3. 获取保存的数据
      方式S保存的数据可以在onCreate(@Nullable Bundle savedInstanceState)和onRestoreInstanceState(@NotNull Bundle savedInstanceState)两个方法中的savedInstanceState中获取;
      方式R保存的数据需要在onResume之前,主动调用getLastNonConfigurationInstance方法获取,onResume之后保存的数据会被清空。

    2021-11-09

    相关文章

      网友评论

          本文标题:Android Activity内的两种数据保存

          本文链接:https://www.haomeiwen.com/subject/dusmzltx.html