欢迎查看合集:
Java、Android面试高频系列文章合集
本人今年参加了很多面试,也有幸拿到了一些大厂的offer,整理了众多面试资料,后续还会分享众多面试资料。
整理成了面试系列,由于时间有限,每天整理一点,后续会陆续分享出来,感兴趣的朋友可关注+收藏
(1)屏幕旋转前,Activity销毁时:
ComponentActivity调用onRetainNonConfigurationInstance()方法,将要销毁的Activity的mViewModelStore转化为NonConfigurationInstances对象,继续调用Activity的retainNonConfigurationInstances()方法,最终在ActivityThread的performDestroyActivity()中将数据保存在ActivityClientRecord中。
(2)Activity重建后:
在Activity启动时,ActivityThread调用performLaunchActivity()方法,将存储在ActivityClientRecord中的lastNonConfigurationInstances通过Activity的attach()方法传递到对应的Activity中,然后通过getLastNonConfigurationInstance()恢复mViewModelStore实例对象,最后根据对应的key拿到销毁前对应的ViewModel实例。
此外,当系统内存不足,系统将后台应用回收后,ViewModel中的数据不会恢复。