异常生命周期下数据的onSaveInstanceState的使用

    onSaveIntanceState方法和onRestoreInstanceState方法是成对出现的,在正常的生命周期下是不会被调用的,除非在异常生命周期下会被调用用来保存和恢复数据。
    异常生命生命周期下常见有两种,分贝为资源相关的系统配置发生改变时(如横竖屏切换时显示不同的图片资源)和系统资源不足回收低优先级的Activity导致的Activity重建。
    实现过程为当Activity发生异常时,Activity调用onSaveInstanceState方法中使用Bundle存储数据,然后Activity会委托Window去保存数据,接着window委托父类继续保存数据,顶层为ViewGroup,到达顶层后然后再去通知各个子View去保存数据。onSaveInstanceState调用发生在onStop方法之前,和onPause方法没有前后之分,执行onDestory方法销毁当前的Activity,然后创建新的Activity,使用onCreate和onRestoreIntanceState方法去恢复数据。这两个都可以进行数据恢复,但是区别在于onRestoreIntanceState一旦调用的话其中的Bundle参数一定会有值,而onCreate不一定,在正常生命周期下的Bundle参数就是为空,此使用onCreate方法就进行判空处理,官方建议使用onRestoreIntanceState进行处理数据恢复。
    当系统资源不足时,系统会按照低优先级回收Activity,这种情况下也会触发onSaveInstanceState方法的进行数据保存以及onRestoreIntanceState方法进行数据恢复。回收优先级分为三种后台、可见但非前台等级。
    总而言之,系统只有在Activity异常终止的情况下调用onSaveInstanceState和onRestoreIntanceState进行数据保存与恢复。其他情况下不会调用。

你可能感兴趣的:(异常生命周期下数据的onSaveInstanceState的使用)