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

最新文章

  1. U3D各路径实例
  2. 怎么用一行代码解决CSS各种IE各种兼容问题
  3. hdu2072
  4. PayPal 开发详解(四):买家付款
  5. 导出Excel Gridview
  6. Ubuntu 15.04 中结束进程的命令
  7. Linux下的压缩和解压
  8. 学生成绩管理C语言版
  9. Android WebView 不支持 H5 input type="file" 解决方法
  10. 13. ZooKeeper最佳实践
  11. Targets选项下Other linker flags的设置
  12. Less 编译生成 css
  13. tf.cast()的用法(转)
  14. 关于final中的几个忽略的点的再次阐述
  15. Ubuntu 初始配置
  16. ODS与DW之间的关系
  17. DISC测试
  18. 【Linux 进程】exec族函数详解
  19. DUBBO监控,设置接口调用数据的上报周期
  20. MFC基于对话框风格按钮控件添加图片的方法(大神止步)

热门文章

  1. vue2.0排序应该注意的问题
  2. vb 案例学习
  3. TP-LINK路由器桥接功能实现(WDS)
  4. springMvc(初识+操作步骤)
  5. redis 其他特性
  6. 5-Java-C(小题答案)
  7. convertquota - 把老的配额文件转换为新的格式
  8. gifsicle for linux ----------gif 图像处理
  9. CGPathAddArc
  10. LeetCode136,137寻找只出现一次的数