文档章节

Android开发框架

k
 kim366
发布于 2016/05/13 19:13
字数 3462
阅读 10
收藏 0
点赞 2
评论 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
朝阳
基于 MVP 架构使用Android通用开发框架快速开发微博项目实战

课程目标: 基于 MVP 架构使用Android通用开发框架快速开发微博项目实战 适应人群: 适合大学生和初中级android开发工程师,可以系统化的微博类APP的开发,系统化掌握商业化项目的开发。* 不...

13122542396 ⋅ 05/25 ⋅ 0

AndroidThings之基础一 基本概念

转载自:https://blog.csdn.net/weixin41636248/article/details/79069994 Android Things是什么 一句话说,AndroidThings就是让开发者可以使用Android开发工具开发嵌入式设备。 If you can...

qq_28831197 ⋅ 05/09 ⋅ 0

Android系统源码分析团体项目BeesAndroid正式上线啦

嗨,BeesAndroid开源技术小组正式成立啦,Bees,即蜜蜂,取义分享、合作与奉献的意思,这也是BeesAndroid小组的宗旨,我们第一个团体项目BeesAndroid也于2018年3月6日同步上线,该项目的前 ...

郭孝星 ⋅ 03/08 ⋅ 0

android仿IT之家、炫酷水波纹、Kotlin MVP项目、后台模拟点击、蜂巢迷宫小游戏等源码

Android精选源码 Android 炫酷的多重水波纹源码(http://www.apkbus.com/thread-598586-1-1.html) Android开发一款基于行为识别和个性化推荐的智能推荐APP(http://www.apkbus.com/thread-5985...

逆鳞龙 ⋅ 05/02 ⋅ 0

老生常谈Android的MVP架构

原生框架问题 由于原生 Android 开发应该已经是一个基础的 MVC 框架,所以在初始开发的时候并没有遇到太多框架上的问题,可是一旦项目规模到了一定的程度,就需要对整个项目的代码结构做一个...

LaxusJ ⋅ 04/23 ⋅ 0

Flutter尝鲜:跨平台移动应用开发

开始之前 本人使用Flutter开发的一个图文App《每日图文》,可以同时运行在Android和iOS上,欢迎体验,喜欢的话还不吝Star一下。 叮叮叮~ 传送门 Flutter为何物? 随着移动App开发成本越来越...

开发的猫 ⋅ 06/06 ⋅ 0

ButterKnife注解框架详解

  Android 懒人注解框架 :https://github.com/JakeWharton/butterknife   前言:     注解,相信很多同学都用到了,对控件进行初始化的时候需要用到 findViewById() ,当一个activit...

听着music睡 ⋅ 2017/04/12 ⋅ 0

学编程,学java还是大数据、android?平均月薪23k以上告诉你方向

学编程,学java还是大数据、android?有不少同学在纠结中,最近有不少初学者来问到,学习大数据,学习spark,公司主要使用那些语言编写,每听到这一个问题,起码还是很不错的,证明你已经开始...

编程南风 ⋅ 05/30 ⋅ 0

ARetrofit组建化最佳路由

Android组件化超级路由,为简单而生。 Github 源码: ARetrofit 原文 demo demo apk 下载 一 介绍 从命名来看,做Android开发的小伙伴们感觉是不是似曾相识…是的,Retrofit,一款优秀的网络框...

CharlesZhu ⋅ 06/05 ⋅ 0

Android程序测试(1)——新建一个简单的测试工程来测试已有的工程

因为程序测试方面是程序开发中非常重要的一方面,这里结合官方教程,来了解下Android程序是怎样进行测试的。 Android开发环境集成了一个容易使用但同时很强大的程序测试框架,通过这个框架,...

一路漫漫 ⋅ 2012/03/16 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

MyBatis四大核心概念

本文讲解 MyBatis 四大核心概念(SqlSessionFactoryBuilder、SqlSessionFactory、SqlSession、Mapper)。 MyBatis 作为互联网数据库映射工具界的“上古神器”,训有四大“神兽”,谓之:Sql...

waylau ⋅ 19分钟前 ⋅ 0

以太坊java开发包web3j简介

web3j(org.web3j)是Java版本的以太坊JSON RPC接口协议封装实现,如果需要将你的Java应用或安卓应用接入以太坊,或者希望用java开发一个钱包应用,那么用web3j就对了。 web3j的功能相当完整...

汇智网教程 ⋅ 33分钟前 ⋅ 0

2个线程交替打印100以内的数字

重点提示: 线程的本质上只是一个壳子,真正的逻辑其实在“竞态条件”中。 举个例子,比如本题中的打印,那么在竞态条件中,我只需要一个方法即可; 假如我的需求是2个线程,一个+1,一个-1,...

Germmy ⋅ 45分钟前 ⋅ 0

Springboot2 之 Spring Data Redis 实现消息队列——发布/订阅模式

一般来说,消息队列有两种场景,一种是发布者订阅者模式,一种是生产者消费者模式,这里利用redis消息“发布/订阅”来简单实现订阅者模式。 实现之前先过过 redis 发布订阅的一些基础概念和操...

Simonton ⋅ 今天 ⋅ 0

error:Could not find gradle

一.更新Android Studio后打开Project,报如下错误: Error: Could not find com.android.tools.build:gradle:2.2.1. Searched in the following locations: file:/D:/software/android/andro......

Yao--靠自己 ⋅ 昨天 ⋅ 0

Spring boot 项目打包及引入本地jar包

Spring Boot 项目打包以及引入本地Jar包 [TOC] 上篇文章提到 Maven 项目添加本地jar包的三种方式 ,本篇文章记录下在实际项目中的应用。 spring boot 打包方式 我们知道,传统应用可以将程序...

Os_yxguang ⋅ 昨天 ⋅ 0

常见数据结构(二)-树(二叉树,红黑树,B树)

本文介绍数据结构中几种常见的树:二分查找树,2-3树,红黑树,B树 写在前面 本文所有图片均截图自coursera上普林斯顿的课程《Algorithms, Part I》中的Slides 相关命题的证明可参考《算法(第...

浮躁的码农 ⋅ 昨天 ⋅ 0

android -------- 混淆打包报错 (warning - InnerClass ...)

最近做Android混淆打包遇到一些问题,Android Sdutio 3.1 版本打包的 错误如下: Android studio warning - InnerClass annotations are missing corresponding EnclosingMember annotation......

切切歆语 ⋅ 昨天 ⋅ 0

eclipse酷炫大法之设置主题、皮肤

eclipse酷炫大法 目前两款不错的eclipse 1.系统设置 Window->Preferences->General->Appearance 2.Eclipse Marketplace下载【推荐】 Help->Eclipse Marketplace->搜索‘theme’进行安装 比如......

anlve ⋅ 昨天 ⋅ 0

vim编辑模式、vim命令模式、vim实践

vim编辑模式 编辑模式用来输入或修改文本内容,编辑模式除了Esc外其他键几乎都是输入 如何进入编辑模式 一般模式输入以下按键,均可进入编辑模式,左下角提示 insert(中文为插入) 字样 i ...

蛋黄Yolks ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部