一、Android重建机制
在Android中,当Activity被销毁时,系统会根据情况来保存Activity的状态,以便在需要时恢复它们。这个过程被称为重建机制。当由系统发起而非人为手动关闭Activity的时候,Activity有可能在未来的某个时机恢复重建。Android系统提供了两套机制,用以保存和恢复界面状态。这两套机制分别是Save-Restore InstanceState机制和RetainNonConfiguration机制。
二、什么时候会重建
并不是任何Activity的销毁行为都会触发Activity数据的保存。只有销毁行为是被系统发起的并且今后有可能恢复的时候才会触发。
1、不会触发重建机制
按返回按键。比如,A Actvivity启动B Activity,BActivity中返回不会调用BActivity的OnSaveInstanceState()方法
最近使用屏幕中滑动关闭 Activity。
从设置中【停止】应用
完成某种“完成”操作,开发者通过调用Activity #finish()方法完成
2、有可能会触发重建机制的
触发恢复重建机制就是两大类
系统回收内存时kill掉。
横竖屏切换和语言切换等配置发生变化时kill重建。(可以通过 Activity #isChangingConfigurations()方法判断是否为配置更改发生的)。
当由系统发起而非人为手动关闭Activity的时候,Activity有可能在未来的某个时机恢复重建。Android系统提供了两套机制,用以保存和恢复界面状态。
这两套机制我分别可以给其取名为 Save-Restore InstanceState机制和RetainNonConfiguration机制。
1、Save-Restore InstanceState机制
Save-Restore InstanceState机制的初衷是保存界面的一些瞬时状态,比如ListView滑动的位置、ViewPager的position一些TextView的文本内容。保证用户进入新建Activity的时候能尽快的看到界面状态的恢复。
Save-Restore InstanceState是一些比较轻量级的数据,因为保存过程需要经历数据的序列化和反序列化。
对于开发者时机操作层面来说,Save-Restore InstanceState机制的核心就是Activity中 onSaveInstanceState() 、onCreate()和onRestoreInstanceState()这三个回调方法。
2、配置改变发生的重建
当如横竖屏的切换、语言切换等配置发生改变时也会触发Activity的重建。这种由配置发生改变而导致的Activity重建除了会触发Save-Restore InstanceState机制之外也会触发RetainNonConfigurationInstance机制。
RetainNonConfigurationInstance机制的核心是Activity中onRetainNonConfigurationInstance()和 getLastNonConfigurationInstance(),这两个回调方法也会回调onRetainNonConfigurationInstance()方法。