Android和MVC

Activity和Android的mvc模式

http://blog.csdn.net/dengshengjin2234/article/details/8502097   //android涉及到的设计模式

http://www.cppblog.com/weiym/archive/2014/07/26/207819.html   //client架构设计

    Activity是Android系统中的四大组件之中的一个。能够用于显示View。

Activity是一个与用户交互的系统模块,差点儿全部的Activity都是和用户进行交互的。可是假设这样就能说Activity主要是用来显示View就不太正确了。还要知道结合android的设计模式。 以下我就先来介绍一下MVC在Android开发中的应用:
  M(Model 模型):Model是应用程序的主体部分,全部的业务逻辑都应该写在这里。在Android中Model层与JavaEE中的变化不大,如:对数据库的操作,对网络等的操作都放在该层(但不是说它们都放在同一个包中,能够分开放,但它们统称为Model层)。
       V(View 视图):是应用程序中负责生成用户界面的部分,也是在整个MVC架构中用户唯一能够看到的一层。接收用户输入,显示处理结果;在Android应用中一般採用XML文件中德界面的描写叙述,使用的时候能够很方便的引入,当然也能够使用JavaScript+Html等方式作为View。
       C(Controller控制层)android的控制层的重任就要落在众多的activity的肩上了。所以在这里就要建议大家不要在activity中写太多的代码。尽量能过activity交割Model业务逻辑层处理。

 好了,在介绍过Android应用开发中的MVC架构后,我们就能够非常明白的知道。在Android中Activity主要是用来做控制的。它能够选择要显示的View,也能够从View中获取数据然后把数据传给Model层进行处理,最后再来显示出处理结果。
介绍过Activity的主要作用后,那么我们就要具体说一下Activity了。

Activity 的生命周期是被下面的函数控制的。
public class Activity extends ApplicationContext {
      protected void onCreate(Bundle icicle);
      protected void onStart();
      protected void onRestart();
      protected void onResume();
      protected void onFreeze(Bundle outIcicle);
      protected void onPause();
      protected void onStop();
      protected void onDestroy();

}


   ANDROID系统分层

    linuxkernel:负责硬件的驱动程序、网络、电源、系统安全以及内存管理等功能。 

    libraries和androidruntime:libraries:即c/c++函数库部分,大多数都是开放源码的函数库,比如webkit,该函数库负责android网页浏览器的执行,比如标准的c函数库libc、openssl、sqlite等。当然也包含支持游戏开发2dsgl和3dopengles。在多媒体方面有mediaframework框架来支持各种影音和图形文件的播放与显示,比如mpeg4、h.264、mp3、aac、amr、jpg和png等众多的多媒体文件格式。

android的runtime负责解释和执行生成的dalvik格式的字节码。 
  applicationframework(应用软件架构)。java应用程序开发者主要是使用该层封装好的api进行高速开发。 
  applications:该层是java的应用程序层。android内置的googlemaps、e-mail、即时通信工具、浏览器、mp3播放器等处于该层,java开发者开发的程序也处于该层,并且和内置的应用程序具有平等的位置,能够调用内置的应用程序。也能够替换内置的应用程序。 
  上面的四个层次,下层为上层服务。上层须要下层的支持,调用下层的服务,这样的严格分层的方式带来的极大的稳定性、灵活性和可扩展性,使得不同层的开发者能够依照规范专心特定层的开发。 
  android应用程序使用框架的api并在框架下执行,这就带来了程序开发的高度一致性,还有一方面也告诉我们,要想写出优质高效的程序就必须对整个applicationframework进行很深入的理解。精通applicationframework,你就行真正的理解android的设计和执行机制,也就更可以驾驭整个应用层的开发
  2。android的官方建议应用程序的开发採用mvc模式。何谓mvc?先看看下图 
  mvc是model,view,controller的缩写。从上图能够看出mvc包括三个部分: 
  l模型(model)对象:是应用程序的主体部分,全部的业务逻辑都应该写在该层。 
  l视图(view)对象:是应用程序中负责生成用户界面的部分。也是在整个mvc架构中用户唯一能够看到的一层。接收用户的输入。显示处理结果。 
  l控制器(control)对象:是依据用户的输入,控制用户界面数据显示及更新model对象状态的部分,控制器更重要的一种导航功能,想用用户出发的相关事件,交给m哦得了处理。 
  android鼓舞弱耦合和组件的重用,在android中mvc的详细体现例如以下: 
  1)视图层(view):一般採用xml文件进行界面的描写叙述,使用的时候能够很方便的引入,当然,怎样你对android了解的比較的多了话。就一定能够想到在android中也能够使用javascript+html等的方式作为view层,当然这里须要进行java和javascript之间的通信,幸运的是。android提供了它们之间很方便的通信实现。

 
  2)控制层(controller):android的控制层的重任通常落在了众多的acitvity的肩上,这句话也就暗含了不要在acitivity中写代码,要通过activity交割model业务逻辑层处理,这样做的另外一个原因是android中的acitivity的响应时间是5s,假设耗时的操作放在这里。程序就非常easy被回收掉,在Android的世界里,控制器一般是Activity、Fragment或Service的一个子类,在Android SDK中的数据绑定。也都是採用了与MVC框架类似的方法来显示数据。在控制层上将数据依照视图模型的要求(也就是Android SDK中的Adapter)封装就能够直接在视图模型上显示了,从而实现了数据绑定。比方显示Cursor中全部数据的ListActivity,其视图层就是一个ListView。将数据封装为ListAdapter,并传递给ListView。数据就在ListView中现实。Android Controller 是非常完备,提供Activity,Service,Broadcast 和 Receiver 等等机制。 
  3)模型层(model):对数据库的操作、对网络等的操作都应该在model里面处理。当然对业务计算等操作也是必须放在的该层的。 
  3,设计模式和ioc(控制反转) 
  毫无疑问。android的之所以可以成为一个开放的气象万千的系统,与设计模式的精妙应用是分不开的,仅仅要你略微用心观察,就会发如今android中到处都是a设计模式或者设计模式的联合运用,设计模式是您想游刃有余的驾驭android必须掌握的:   
  android框架魅力的源泉在于ioc,在开发android的过程中你会时刻感受到ioc带来的巨慷慨便,就拿activity来说,以下的函数是框架调用自己主动调用的: 
  protected  void  oncreate(bundle savedinstancestate); 
  不是程序编写者主动去调用。反而是用户写的代码被框架调用。这也就反转了!当然ioc本身的内涵远远不止这些,可是从这个样例中也能够窥视出ioc带来的巨大优点。此类的样例在android随处可见,比如说数据库的管理类。比如说android中sax的handler的调用等。有时候。您甚至须要自己编写简单的ioc实现

    MVC优点:从用户的角度出发,用户能够依据自己的需求,选择自己合适的浏览数据的方式。比方说,对于一篇在线文档,用户能够选择以HTML网页的方式阅读,也能够选择以pdf的方式阅读。从开发者的角度,MVC把应用程序的逻辑层与界面是全然分开的。最大的优点是:界面设计人员能够直接參与到界面开发。程序猿就能够把精力放在逻辑层上。

而不是像曾经那样。设计人员把全部的材料交给开发者。由开发者来实现界面。在Eclipes工具中开发Android採用了更加简单的方法,设计人员在DroidDraw中设计界面,以XML方式保存。在Eclipes中直接打开就能够看到设计人员设计的界面。

http://www.pocketdigi.com/20131223/1231.html

http://www.tuicool.com/articles/maQNNz


posted @ 2017-05-07 11:10  mfmdaoyou  阅读(275)  评论(0编辑  收藏  举报