一个ViewModel,多个Activity

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一个ViewModel,多个Activity相关的知识,希望对你有一定的参考价值。

参考技术A 当定义了一个ViewModel类,有多个Activity中通过ViewModelProvider创建了这个ViewModel实例,那么这些实例的值是独立的吗?
1.新建ViewMode的子类TestViewModel

2.ActivityA的oncreate中实例化TestViewModel对象,并设置值为100,打印log:

3.ActivityB的oncreate中同样实例化TestViewModel对象,打印time值;

A中启动B,运行结果

A中设置了100,到B中就回到了0,所以ViewModel和其他普通类一样,每个Activity可以持有一个独立的ViewModel对象;
不知道我这个说法是否完全正确,目前看现象是这样;

至于原理:等我探讨源码之后,再来给出分析过程;

ViewModel组件

ViewModel

 

1.数据持久化、

activity销毁重建   传统使用 onSaveInstanceState,但只适合少量的可以被序列化的数据    (可存储的空间不大)

 

由于ViewModel的生命周期是贯穿整个Activity的生命周期的,包括activity因旋转造成的重新创建activity,直到activity真正意义上销毁才会结束

 

2.异步回调问题

通常:app需要频繁异步请求数据:如:接口请求服务器数据。这些回调一般耗时,当请求的回调未完成,然而activity被销毁了,

就会导致内存泄漏。可以利用ViewModel处理数据回调。

 

3.分担UI controller

分离出数据操作的职责

 

4.

以上是关于一个ViewModel,多个Activity的主要内容,如果未能解决你的问题,请参考以下文章

Catel:具有一个View的多个ViewModel。可能吗?

如何在 WPF 中使用多个 ViewModel 并通过一个 MainViewModel 绑定它们?

具有多个视图相同 ViewModel 的棱镜导航

如何在MVVM中使用相同的ViewModel拥有多个视图?

ViewModel在MVC3中的应用:一个view显示多个model

WPF - 使用具有多个 ViewModel 的单个模型