ViewModel与活动中的静态变量

时间:2018-09-21 05:10:40

标签: android

我知道处理方向变化的一种解决方案是使用ViewModel来保存超出活动范围的数据。

但是,我想知道,如果我们在类中创建一个静态变量来保存相同的数据,就不能达到相同的目的吗?

我们为什么要走ViewModel路径?

谢谢

4 个答案:

答案 0 :(得分:2)

一个原因是因为活动本身不是静态的或单例的。您可以让ItemViewActivity为不同的项目启动另一个ItemViewActivity,并且如果它们通过静态变量共享相同的变量,则您可能只是打破了后退按钮。而且,如果您对它们的编码不十分仔细,则可能会将数据发送到错误的“活动”视图。

答案 1 :(得分:1)

好问题!那么,我们能达到同样的目的吗?可能是的,但这就像重新发明轮子一样,而且您很可能最终将获得与ViewModel提供的相同或相似的解决方案。我想您在这里需要了解的是,Android中的活动是对基础MVC设计的反映,而您绑定到活动的数据信息与视图本身是分离的,因此在任何时间点,您都可以将您的实际数据状态重新绑定到重新创建它的视图(活动),因此继续进行,就像什么都没有改变一样。例如,在旋转屏幕时,销毁您的活动(视图),保存并传递其数据状态,然后重新创建,重新绑定其数据,用户可以从离开的地方继续。 这就是ViewModel所做的,它在Android生命周期的上下文中管理活动数据状态。如果您想自己完成同样的任务,那将是非常困难但可能的。

答案 2 :(得分:0)

ViewModel库位于Android architecture components之一中,除了处理配置更改外,它还充当Activity/Fragment与应用程序数据访问层之间的通信方式。此数据访问层可能包括您的缓存,SQLite或云上的任何其他远程数据。 将ViewModelLiveData关联还可以做很多其他事情。 请参阅sample here

答案 3 :(得分:0)

静态变量将在应用程序的整个生命周期中始终存在。如果不及时清理,可能会浪费内存。