ViewModel摘要

2018-11-28  本文已影响3人  为什么要简称

在使用androidx库后发现CompatActivity没有实现ViewModelStoreOwner接口,这是为什么呢?
原来它对appcompat包引用的版本是

implementation 'androidx.appcompat:appcompat:1.0.0-beta01'

那么我们把版本修改为

implementation 'androidx.appcompat:appcompat:1.0.0'

就可以了

1_3Kr2-5HE0TLZ4eqq8UQCkQ.png

如上图,传统作业中数据在视图中操作,旋转时( 其实不论什么原因导致生命周期变化时)数据就尴尬了。

Google I/O 2017 Android Frame团队推出了一组新的架构组件,其中的ViewModel就解决了上述问题。

ViewModel的设计目的是在lifecycle中保存和管理UI相关的数据,它允许数据在配置更改时继续存活。

使用的简单步骤:
1.create a class that extends ViewModel,并把数据分离到这个类中。

2.建立class和UI的联系。ViewModel不应该持有任何UI的引用(如Activity、Fragment、Context [ Application Context是OK的,因为Application Context与应用的生命周期绑定而不是Activity,所以需要的话也可以继承AndroidViewModel ] ),也不应该包含<任何引用了UI的对象>,因为ViewModel可能比UI活的更久。

ViewModelProviders.of(<Your UI controller>).get(<Your ViewModel>.class)

3.在UI中使用这个class(和LiveData搭配更好用哦)。

关于 ViewModelProviders.of(<A>).get(ScoreViewModel.class):
在第一次被A调用后,创建一个新实例,再次调用的时候,会返回和A关联的已经存在的实例,数据就这样被保存下来了。

注意:ViewModel非常方便的将数据和UI进行剥离,单并不能解决所有数据持久化和app状态的问题。随后会细看Activity生命周期和ViewModel的微妙互动,并且对ViewModel和onSaveInstanceState进行比较。

待续。

上一篇下一篇

猜你喜欢

热点阅读