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的单元测试还是业务逻辑的单元测试,都是低耦合的。

参考技术A 说MVVM首先先提到标记语言,随着20世纪初web的崛起,html跟JS这样标记语言+程序语言的组合模式开始变得令人注目。逐渐推出的Flex、Sliverlight、QT、WPF、JSF、Cocoa等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中Service服务都有哪些?

android列举selector标签常用到属性,并说明分别代表哪些意思

android 都有哪些框架框架

安卓系统都有哪些版本分别有啥区别

Android Support Library 23.2都有哪些新东西

Android - 框架之MVP模式的使用