文档章节

Android开发框架

k
 kim366
发布于 2016/05/13 19:13
字数 3462
阅读 10
收藏 0
        开发框架概述
       
       从功能上将Android开发分为移植开发移 动电话系统、Android应用程序开发,以及Android系统开发三种。
       Android开发框架包括基本的应用功能开发、数据存储、网络访问三大块。 

1.4.1  应用方面
       一般而言,一个标准的Android程序包括Activity、Broadcast Intent Receiver、Service、Content Provider 四部分。

       1.Activity
       Activity是在Android应用开发中最频繁、最基本的模块。在Android中,Activity类主要与界面资源 文件相关联(res/layout目录下的xml资源,也可以不含任何界面资源),包含控件的显示设计、界面交互设计、事件的响应设计以及数据处理设计、导航设计等Application设计的方方面面。 
       因此,对于一个Activity来说,它就是手机上的一个界面,相当于一个网页,所不同的是,每个Activity 运行结束时都返回一个返回值,类似一个函数。Android系统会自动记录从首页到其他页面的所有跳转记录并且自动将以前的Activity压入系统堆栈,用户可以通过编程的方式删除历史堆栈中的Activity Instance。

       2.Broadcast Intent Receiver
       Intent为不同的Activity进行跳转提供了机制,譬如从A Activity跳转到B Activity,使用Intent来实现, 语句如下。 
                 Intent in = new Intent(A.this, B.class);
                 startActivity(in);
       Broadcast Intent Receiver为各种不同的Android应用程序间进行进程间的通信提供了可能。如当电话 呼叫来临时,可以通过Broadcast Intent Receiver发布广播消息。对用户而言,用户是无法看到Broadcast Intent  Receiver事件的,它对用户是不透明的,Broadcast Intent Receiver通过Notification Manager来通知用户这些事件发生了,它既可以在资源AndroidManifest.xml中注册,也可以在代码中通过Context.registerReceiver() 进行注册,在AndroidManifest.xml中注册以后,当事件来临时,即使程序没有启动,系统也会自动启动此应 
用程序。另外,各应用程序可以很方便地通过Context.sendBroadcast()将自己的事件广播给其他应用程 序。

         3.Service
       Android中的Service和Windows中的Service完全是一个概念,用户可以通过StartService(Intent service) 启动一个Service,也可通过Context.bindService来绑定一个Service。

         4.Content Provider
       Content Provider提供了应用程序之间数据交换的机制,一个应用程序通过实现一个Content Provider 的抽象接口将自己的数据暴露出去,并且隐蔽了具体的数据存储实现,这样实现了Android应用程序内部数据的保密性。标准的Content Provider提供了基本的CRUD(Create、Read、Update、Delete)接口,并且实现了权限机制,保护了数据交互的安全性。 
       一个标准的Android应用程序的工程文件包含以下几大部分。
        Java源代码部分(包含Activity)——放置在src目录中。
        R.java文件——由Eclipse自动生成与维护,开发者不需要修改,提供了对Android资源的全局索引。
        Android Library——应用程序运行的Android库。
        assets目录——主要用于放置多媒体等文件。
        res目录——放置的是资源文件:drawable包含的是图片文件,layout里面包含的是布局文件,values 里面主要包含的是字符串          
         (strings.xml)、颜色(colors.xml)以及数组(arrays.xml)资源。 
        AndroidManifest.xml——应用的配置文件,在这个文件中,需要声明所有用到的Activity、Service、
        Receiver等。

1.4.2 数据存储
       Android中提供的存储方式包括:SharedPreferences、文件存储、SQLite数据库存储方式、内容提供器 方式Content Provider以及网络方式5种,具体介绍如下。
        1.SharedPreferences
       作为Android提供的一种配置文件读/写方式,默认保存在应用的目录data/<package name>/shared_prefs下,通过方法getSharedPreferences(xx, 0);来获取SharedPreferences对象进行读/写操作。
        2.文件存储
       Android系统提供了进行数据读/写访问的API,例如,openFileInput、openFileOutput等,需要特别注意的是,Android中应用程序的数据是私有的,也就是说,其他应用程序无法访问当前应用程序产生的文件。
        3.SQLite数据库存储方式
       通过继承SQLiteOpenHelper类提供的CRUD接口来进行数据库操作,方便了应用程序的数据存储操
作。
       4.内容提供器方式(Content Provider)
      通过调用其他应用程序的数据接口来实现数据的读/写访问。
       5.网络方式
      主要通过下面要提到的网络访问该网络提供的网络服务接口,实现数据的读/写服务(如WebService数据访问接口)。

1.4.3 网络访问方面
      Android主要通过java.net.*及Android.net.*来进行HTTP访问技术的封装;利用其提供的HttpPost、 DefaultHttpClient,HttpResponse等类提供的访问接口来实现具体的Web服务访问。

1.4.4 开发流程
       软件开发流程(Software Development Process)即软件设计思路和方法的一般过程,包括设计软件的 功能及实现的算法和方法、软件的总体结构设计和模块设计、编程和调试、程序联调和测试以及编写、提交程序。软件开发的生命周期如图1-4所示。
       需求分析:根据客户的要求,清楚了解客户需求中的产品功能、特性、性能、界面和具体规格等,然 后进行分析,确定软件产品所能达到的目标。 
       设计:根据需求分析的结果,考虑如何在逻辑、程序上去实现所定义的产品功能、特性等,可以分为 概要设计和详细设计,也可以分为数据结构设计、软件体系结构设计、应用接口设计、模块设计、界面设计等。 
       编程(实现):开始具体的编写程序工作,分别实现各模块的功能,从而实现对目标系统的功能、性 能、接口、界面等方面的要求,将设计转换成计算机可读的形式。
       测试:对设计、编程进行验证,对用户需求进行确认。
       维护:维持软件运行、修改软件缺陷、增强已有功能、增加新功能、升级等。
       
对一个软件产品或者一项软件工程来说,参与角色通常包括以下几种。
        高级经理:参与项目过程中各个关键环节的活动,关注产品开发的进度,对风险控制、资源提供 做出决策。 
        产品经理或项目经理:客户方和公司内部交流的纽带,主要对项目过程进行监控,对项目的进度、 质量负责,制定计划、协调资源、关注和控制计划进度、控制客户期望值等。 
        开发经理:负责界定需求,确定适当的技术构架和体系,保证软件产品按照设计的标准开发。
        设计师:通常设计师可以分需求分析师、构架设计师、业务设计师3种,能够准确把握客户需求 并提供可行的实现思路,进行需求分  
析、进行构架设计和功能设计,按照规范编写相应的文档, 将设计思路传播给开发人员、测试人员。 
        测试经理及测试人员:测试经理主要负责计划和组织测试人员对目标产品进行测试,发现bug、跟 踪bug,直到解决bug;测试人员则 
根据测试经理的计划和测试总体方案对目标产品进行测试,编写测试用例和测试代码,发现和跟踪bug;编写用户手册;进行用户培训和教育。 
        开发人员:根据设计师的设计成果进行具体编码工作,对自己的代码进行基本的单元测试。
        项目实施人员:负责软件系统安装配置、系统割接、运行期间的维护工作。


       怎样搭高质量的Android项目框架,框架的结构具体描述?
      
1. 结合android项目本身,根据需求尽量精简框架,以MVC,MVP,MVVP等(也可以创新)其中一个为标准来编写,不要被框架约束自己的想法。高质量,可以通过测试,来进行重构。
2. 如果你的应用是基于HTTP进行网络数据请求的方式,google上面的一个框架volley是一个不错的选择。
3.  MVP, MVVP。
4. 不请自来说点废话。楼上  Tian  前辈说的很好,而且有图有真相。
5. 一个好的框架设计是基于业务需求的,脱离了具体业务谈框架也没多大的意义。 Tian  前辈很好地阐释了 Android 应用的基本构成, 康仁辉  前辈则很好地说明了 Android 通用模块的划分。
就像前面说的,脱离了具体业务,谈项目框架也就没有意义。在此之前能做的,就像是  康仁辉  前辈说的,把一些通用的功能模块抽象出来,作为服务提供给开发人员使用。比如 Http 请求方面 Volley,图片异步加载方面 ImageLoader,数据解析方面 GSON,还有各种 UI 效果 PullRefreshListView 等。
      这些小的框架根据不同的业务需求,最后组装成了你的整个 App 框架。抛开 App 大的框架不谈,我们只说说如 Volley 这样的小的框架,再设计方面应该注意哪些方面。
      其实如  Tian  前辈所说,框架其实就是一种抽象,功能上的以及业务上的抽象。抽象的质量最终决定了代码的质量以及能够解决问题的复杂度。好的抽象应该是这样的(其实就是设计原则):
  1. 功能单一的。也就是设计法则中的单一职责。单一职责原则适用于类和方法的设计,同样也适用于框架的设计。
  2. 良好的封装以及简单地 API 调用。框架作为服务提供者,很多情况下是为了提升开发效率,对于一个相对稳定的第三方框架,开发者是不会关注于其具体实现的。
  3. 良好的扩展性。也就是开闭原则,一个设计良好的模块,应该在不被修改的前提下被扩展。我们扩展开来,一个设计良好的框架,应该在具体代码业务不被修改的前提下进行修改。
  4. 低耦合高内聚。其实就是对前面1 2 3 点的总结。
  5. 稳定性高于一切。
  6. 测试覆盖率,尽量保证每一个功能点都被覆盖。
     7. 异常机制。就像前面所说的,稳定性高于一切。稳定性不光得益于良好的设计,还需要良好的异常机制的设计。对异常进行处理,不光适用于框架的设计,也适用于App 的设计。抛出异常来说明异常状况,但是不要强迫客户端使用异常来控制流。
     8. 从普通使用者的角度去考虑抽象,技师增加一定的代码量,这也是值得的。
     9. 起一个萌一点的名字,最好能够萌到看一眼就知道功能。这包括类的设计、方法的设计以及参数列表的命名。
     10. 需要开发者配置的参数尽量对象化。比如一个方法参数可接受三种 int 型的值(1 , 2, 3),用以表示不同的意思。那么尽可能的创建一个 State 类,里面有三个静态常量 STATE_ONE ,STATE_TWO ,STATE_THREE 。
     11. 对参数进行校验。接收到参数之后,尽可能的对每一个参数进行非法验证,比如非空判断、参数无意义的判断等,用异常的方式告知开发者需要传递正确的参数。
     12. 尽可能简单地方法参数。或者说尽可能多的重载方法。但是需要注意模棱两可的重载。
     13. 如12所说,延展说来就是尽量避免使用长参数列表。长参数列表更容易出差,而且对于维护以及编译、运行并不友好。如有必要,创建参数助手类(参考11)。
     14. 对可能会犯的错误进行预计,要用发展的思维来设计框架,这一点有点跟11意思一样。
     15. 版本兼容性。保证框架升级之后,对于老版本的支持。
     16. 框架 API 生命周期的管理。具体的手段可以是设计 API 级别,比如内部、测试、开发、稳定等等。
          借用 Google 以为大神的总结就是,框架设计需要满足如下几点:
  • 简单易学;
  • 易于使用,即使没有文档;
  • 很难误用;
  • 易于阅读,代码易于维护;
  • 足够强大,可以满足需求;
  • 易于扩展;
  • 适合用户。
     最后,可以系统的学习一些好的开源项目,如 Volley、ImageLoader、国内几个微博的开放 SDK 等等。
     肥肥见识浅薄,在各位前辈面前班门弄斧,还望各位前辈不吝赐教。
6.  根据经验,一个良好的架构设计可大致分三层:
— 上层是Activity、Fragment、Views&Widget等视图渲染和业务调用。 
— 中层是针对业务的三方库,以及主要逻辑实现,业务流程在这完成,此层还可以细分,不再多表。 
— 底层是业务无关的框架库,用之四海而皆准,各类库内高内聚,不同库间低耦合。
      

本文转载自:http://blog.csdn.net/oyangyujun/article/details/47960635

共有 人打赏支持
k
粉丝 1
博文 129
码字总数 0
作品 0
朝阳
私信 提问
【必看】Android干货整理

哗啦啦,为方便大家更好的学习交流,小编特地整理了一大波干货!预备 前方高能预警,一大波干货袭来,接住了!!!!!!!!!!!! 如果你是零基础小白,不知如何上手Android开发,不知应学习哪些工具...

慕课网官方_运营中心
08/01
0
0
Android 进阶学习笔记整理

一.android系统架构图及各层介绍 1. 应用层:应用是用java语言编写的运行在虚拟机上的程序,比如通讯录,日历,电话,短信,浏览器等。 2. 应用框架层:这一层是编写Google发布的核心应用时所...

FunCode
07/22
0
0
Android Camera 架构简析1

前言 最近整体看了一下Android Camera 部分代码,从Framework的Camera 应用框架到 Hardware的Camera HAL 再到 Kernel的 Camera Driver。把对Camera部分的学习整理成笔记,方便理解。 2. 概述...

Jerikc
2012/09/03
0
0
移动开发者必须知道的Android框架推荐

一些总结出来的Android快速开发框架,全部都是开源框架,附带项目地址,是开发学习的绝佳资料。 thinkAndroid项目 github地址:https://github.com/white-cat/ThinkAndroid 功 能:ThinkAndr...

程序袁_绪龙
2014/09/02
0
0
Android开发的技术层次

任何一种移动开发生态系统其技术人员都是呈现金字塔式分布的。 也就是我们常说的大部分人都是开发人员,只有少数人是真正意义上的程序员。 android系统也是一样,在庞大的android开发人员群体...

迷途d书童
2012/03/30
159
1

没有更多内容

加载失败,请刷新页面

加载更多

eslint rules 规则

'rules': { "comma-dangle": ["error", "never"], //是否允许对象中出现结尾逗号 "no-cond-assign": 2, //条件语句的条件中不允许出现赋值运算符 "no-console": 2, //不允许出现console语句 ...

agenyun
20分钟前
1
0
类型判断时instanceof和equals的不同用法

接口设计时为了避免序列化的麻烦,将接口定义为参数为map<String,String>类型的接口,但是现在调用时需要转换当前的实体Bean为Map,接口接收方再把Map转换为另一个Bean实体。过程中的需要对类...

wangtx
26分钟前
1
0
vue 组件间传值(个人精编)

1.父组件向子组件传值 1⃣️.子组件标签绑定需要传递的参数名2⃣️.子组件页面使用props 接收参数 2.子组件向父组件传值  1⃣️.子组件使用$emit来触发一个自定义事件,并传递一个参...

MrBoyce
37分钟前
1
0
(荷兰)彼得·冯·门施著:博物馆学研究的目的

博物馆学研究的目的 (荷)彼得·冯·门施 尽管诸多关于博物馆学认知目的的不同看法可以被归纳为数个主要群体,但没有一个群体可以被称为“学派”。一般来说,学派是由于博物馆学研究目的的不...

乔老哥
46分钟前
2
0
Vue slot的用法

之前看官方文档,由于自己理解的偏差,不知道slot是干嘛的,看到小标题,使用Slot分发内容,就以为 是要往下派发内容。然后就没有理解插槽的概念。其实说白了,使用slot就是先圈一块地,将来...

peakedness丶
58分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部