android mvvm 角色分别都有哪些担任
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了android mvvm 角色分别都有哪些担任相关的知识,希望对你有一定的参考价值。
MVVM的目标和思想MVP类似,利用数据绑定(Data Binding)、依赖属性(Dependency Property)、命令(Command)、路由事件(Routed Event)等新特性,打造了一个更加灵活高效的架构。
数据驱动
在MVVM中,以前开发模式中必须先处理业务数据,然后根据的数据变化,去获取UI的引用然后更新UI,通过也是通过UI来获取用户输入,而在MVVM中,数据和业务逻辑处于一个独立的View Model中,ViewModel只要关注数据和业务逻辑,不需要和UI或者控件打交道。由数据自动去驱动UI去自动更新UI,UI的改变又同时自动反馈到数据,数据成为主导因素,这样使得在业务逻辑处理只要关心数据,方便而且简单很多。
低耦合度
MVVM模式中,数据是独立于UI的,ViewModel只负责处理和提供数据,UI想怎么处理数据都由UI自己决定,ViewModel 不涉及任何和UI相关的事也不持有UI控件的引用,即使控件改变(TextView 换成 EditText)ViewModel 几乎不需要更改任何代码,专注自己的数据处理就可以了,如果是MVP遇到UI更改,就可能需要改变获取UI的方式,改变更新UI的接口,改变从UI上获取输入的代码,可能还需要更改访问UI对象的属性代码等等。
更新 UI
在MVVM中,我们可以在工作线程中直接修改View Model的数据(只要数据是线程安全的),剩下的数据绑定框架帮你搞定,很多事情都不需要你去关心。
团队协作
MVVM的分工是非常明显的,由于View和View Model之间是松散耦合的。一个是处理业务和数据,一个是专门的UI处理。完全有两个人分工来做,一个做UI(xml 和 Activity)一个写ViewModel,效率更高。
可复用性
一个View Model复用到多个View中,同样的一份数据,用不同的UI去做展示,对于版本迭代频繁的UI改动,只要更换View层就行,对于如果想在UI上的做AbTest 更是方便的多。
单元测试
View Model里面是数据和业务逻辑,View中关注的是UI,这样的做测试是很方便的,完全没有彼此的依赖,不管是UI的单元测试还是业务逻辑的单元测试,都是低耦合的。
在这样的架构中,view(或者说叫控件,不但是从依赖关系上跟程序的其他部件解耦,而且从语言上跟其它部分隔离开来)
然而这样的系统架构中,MVC和MVP模式已经不能很好地适用了。微软架构师John Gossman在WPF的XAML模式推出的同时,提出了MVVM的概念。
在安卓开发中,layout文件是静态的,只能通过代码进行修改,大量的事件绑定和finViewById以及视图的逻辑充斥在Activity中,使Acticity显得特别胖。
MVP虽然在一定程度上解决了Acticity代码量庞大,实现视图逻辑和视图操作的解耦,但是他们还是需要大量的代码对layout进行设置属性,比如说ImageView的setImageBitmap或者TextView的setText,显得特别啰嗦也很容易出错
但是而在安卓的Databinding中,把一个layout里面的控件的某些属性绑定对应的bean,把操作的控件看成bean对象,只需要对layout绑定的bean进行修改之后,layout就会随之改变。
这里的bean就是MVVM中的Model,那么对bean进行逻辑处理的就是VM(ViewModel),这样我们主需要关心M和VM之间的交互了。但是,还不能是实现双向绑定,比如说,对一个EditText的text属性绑定一个bean的属性,那么对EditText修改之后他的bean不会随之变化,当然可以自定义属性解决这个问题。
下面就是layout
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<!-- 配置变量,name字段为下面想要引用的类,type为全类名,
AS中快捷键ctrl+shift+alt+c -->
<data>
<import type="com.znke.hellodatabinding.test1.Person"/>
<variable
name="person"
type="Person"/>
</data>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<!-- 需要填充的字段用@表示 -->
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="25sp"
android:text="@person.name"
/>
</LinearLayout>
</layout>1234567891011121314151617181920212223242512345678910111213141516171819202122232425
一个布局文件就是一个ViewBinding对象,它包含了这个布局里面所有View和变量:
ActivityRecyclerviewBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_recyclerview);
1212
注意,ActivityRecyclerviewBinding是系统自动生成的
然后看一下MVVM的示意图
MVVM是MVP的升级版,只是把presenter变成了ViewModel,并且MVVM支持绑定。
安卓系统都有哪些版本分别有啥区别
安卓系统版本及区别在1.5版本出现前,Android还有0.9、1.0、1.1等众多版本,但那时Android系统尚不成熟,没有中文输入、没有稳定的ROM、没有蓝牙等,甚至在软件安装上受到众多限制,简直不成气候.
后来,谷歌针对一系列不足,大幅升级完善了原先的各种版本,整合为全新的1.5版本,1.5版本与之前的版本相比变化巨大,重新设计了用户界面、增加了中文输入、完善了键盘输入、修改了许多漏洞、增加了更多谷歌服务……
但虽然有了蓝牙,依然不能传输文件,而且没有关机闹钟等细节功能,总体来说1.5结束了各版本混战的局面,开创了Android系统的新河,所以1.5被公认为Android的鼻祖.而后的1.6则是对1.5的某些漏洞的升级,
另外完善了操作,改动不大.由于在此期间,谷歌将蓝牙传输文件这一功能加入Android系统,另外对用户界面进行大幅优化,对硬件大幅升级,因此让系统再次蜕变,直接跳过1.7--1.9,命名为2.0,意为全新的开始.2.0、2.1版本支持更多软件、细节更加完善,带给用户更好的体验,使Android真正成熟了. 参考技术A 版本越高支持的功能也就越多。功能也越完善。
最次的也要是2.1以上的。2.1以下的很多功能和软件都不支持。
目前使用最广的是2.3及以上的版本。
4.0是最新版本追问
没有4.11版本吗
追答还没有,有4,12,
追问高版本比低版本好吗
追答当然,不光支持软件多,而且系统布局人性化,用户体验好,更流畅
追问操作一样吗
参考技术B 回答纸杯蛋糕(Android 1.5),甜甜圈(Android 1.6),松饼(Android 2.0/2.1),冻酸奶(Android 2.2),姜饼(Android 2.3),蜂巢(Android 3.0),冰激凌三明治(Android 4.0),
奇巧(KitKat,Android 4.4),棒棒糖(Lollipop,Android 5.0),棉花糖(Marshmallow,Android 6.0),牛轧糖(Nougat,Android 7.0)。
参考技术C 版本越高系统越稳定,但剩余运行内存减少!追问为什么会减少
追答运行内存是出厂时设的,它是不变的,而系统越高rom包越大。要想把运行内存变大只能刷机
追问出厂家为什么不把运行内存扩大呢
追答你得问他们,呵呵,可能有他们的道理吧。
追问不懂
追答我也不是很懂。是别人这么说的
参考技术D 没什么区别的,只是系统高点,如果手机配置滴建议不要升级追问咋了
追答它有2.34,2.37,4.0,4.3什么的,
追问为什么不能升级
追答配置低的手机最好保持,不然升了费电,运行不流畅,配置高的就可以升
以上是关于android mvvm 角色分别都有哪些担任的主要内容,如果未能解决你的问题,请参考以下文章
android列举selector标签常用到属性,并说明分别代表哪些意思