美文网首页
ViewModel摘要

ViewModel摘要

作者: 为什么要简称 | 来源:发表于2018-11-28 11:43 被阅读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进行比较。

    待续。

    相关文章

      网友评论

          本文标题:ViewModel摘要

          本文链接:https://www.haomeiwen.com/subject/evwqgftx.html