jitpack之viewmodel原理

100 阅读1分钟
  • Activity(Fragment) 的 ViewModel 都存储在 ViewModelStore 中,每个 Activity(Fragment) 都会拥有一个 ViewModelStore 实例。
  • ViewModelProvider 负责向使用者提供访问某个 ViewModel 的接口,其内部会持有当前 Activity(Fragment) 的 ViewModelStore,然后将操作委托给 ViewModelStore 完成。
  • ViewModel 能在 Activity(Fragment) 由于配置重建时恢复数据的实现原理是:Activity(指 support library 中的 ComponentActivity) 会将 ViewModelStore 在 Activity(Fragment) 重建之前交给 ActivityThread 中的 ActivityClientRecord 持有,待 Activity(Fragment) 重建完成之后,再从 ActivityClientRecord 中获取 ViewModelStore。
  • 如果应用的进程位于后台时,由于系统内存不足被销毁了。即使利用 ViewModel 的也不能在 Activity(Fragment) 重建时恢复数据。因为存储 ViewModel 的 ViewModelStore 是交给 ActivityThread 中的 ActivityClientRecord 暂存的,进程被回收了,ActivityThread 也就会被回收,ViewModelStore 也就被回收了,ViewModel 自然不复存在了。