Android 应用开发重要组成解析
1. 概述:
前期一边学习,一边进行过android应用的开发。后来由于各种原因,在一段时间内放下了android应用的开发,后来再次拿起来的时候明显感觉陌生了很多,可能是长时间没接触的原因,亦或者是基础薄弱的原因,所以感觉有必要整理一下android应用开发相关内容。帮助自己建立一个系统完整的概念。这里主要介绍android中必须掌握,也是常用的四大,五大存储,六大布局,以及另外两个重要组成部分。本文章并不会对每部分进行详细介绍,主要简单陈述各组成部分的概念、功能,方便开发者建立整体概念,并在使用时可以通过本文档与需求功能确定使用那一部分。详细内容请自行查阅相关资料或后续针对每部分的详细文档。
2. 四大组件
android的四大组件主要包括:
activity service content provider broadcast receiver2.1 activity:
学习android开发首先要学的就是activity,他是android中非常中重要的概念。activity在android中是为一个界面,且界面中有且只能一个activity。主要完成界面相关操作与管理。当我们启动应用程序时,首先启动一个activity。每个activity都必须在androidmainfest.xml中注册,否则android系统将无法检测识别到该activity,更无法启动该activity。
2.2 service:
既然activity主要运行于前台,用于界面展示,那必然有组件运行于后台,为前台展示提供相关服务,帮助前台处理相关数据等,这个组件就是service,这里的前台与后台是指用户是否可以直观看到或者感受到,并不是指不同线程,因为activity与service都运行于主线程。既然serive是为了帮助activity完成某些操作。那么service必然与activity存在一定的关联。这种关联主要有两种情况:
绑定:activity与service需要经常进行数据交换,且两者不求同时生但求同时死,即关闭activity时,也不需要使用service提供的相关数据或完成相应功能 启动:一般用于两者可能只进行少量数据交换,甚至只进行一次数据交换,activity启动service以后不需要关注service的状态,service完成activity指定的功能即可。区别:绑定任务与启动任务service执行的函数不同。
bindservice(绑定服务):执行onbind(); startservice(启动服务):执行onstartcommand();绑定或者启动服务后,服务就开始在后台执行。
2.3 broadcast receiver
boradcast receiver为广播与广播接收者,其实这个组件包括两部分,分别为broadcast:广播,receiver:广播接收者,我们可以通过生活中的电台与收音机做一个形象的类比,broadcast就相当于我们生活中的电台,电台发送的是电磁波,里面携带语音消息等内容,而android的broadcast发送的是intent,里面也携带了接受者感兴趣的消息。而receiver相当于收音机,收音机接收到的是电磁波,并分析出其中携带的各种消息进行播放,而android中的receiver接收到intent,也解析出其中携带的信息,并执行相应的操作。其中broadcast reciver的接收者也需要进行注册,主要分为两种方式:
静态注册:静态注册是在androidmainfest.xml文件中进行注册,通过静态注册即使实现receiver的activity没有启动,也会执行相关操作。 动态注册:动态注册是在需要接受广播的activity中通过代码注册,动态注册时,当注册了广播接收者的activity没有启动时,广播接收者不会接收到相关广播,更不会执行相关操作。2.4 content provider
content provider中文名为内容提供者,根据中文名我们大胆推测:这个组件是为应用提供数据的。正如我们推测的一样,content provider正是为应用提供数据共享。实现应用间的数据共享,例如:应用获取手机中的通讯录信息通过content provider 可以统一应用间数据共享的方式与接口,使用时也需要进行注册。
android没有提供不同应用间共享内存的概念,所有可以通过content provider实现数据的共享 多个不同应用需要获取同一共享数据,通过唯一标识uri实现,uri以 content:// 作为前缀,该前缀表示数据由content provider管理 开发者一般不直接使用content provoder实现数据保存,管理和读取,而是通过coententresolver实现对content provider的操作总结:
四大组件都必须要注册才能够使用且都可以在androidmainfest.xml中实现静态注册,通过静态注册的组件与系统的整个生命周期相同,只要接收到相应广播都会执行相关操作,无论组件所依附的应用或组件处于什么状态,而boardcast receiver还可以动态注册,通过动态注册的组件依附于注册组件的生命周期,
3. 六大布局
android开发既要完成相应功能,还要使界面尽可能美观,要完成相关需求,就必须掌握android布局与自定义组件相关内容。这里我们主要介绍android布局相关内容。android主要有两种方式实现布局:分别为:xml方式与java代码方式建议使用xml实现界面中的静态部分,尽可能使用xml实现布局,既可以减少资源消耗,还可以提高响应速度。无论使用哪种方式实现,都需要对界面进行布局,android包含以下6种布局方式:
linearlayout:线性布局,分为横向和纵向两个方向。 relativelayout:相对布局。 framelayout:帧布局。 tablelayout:表格布局 gridlayout:网格布局(android 4.0新增) absolutelayout:绝对布局,不建议使用。六种布局方式既有共同属性,又有其特殊属性,可以根据需求选择相关布局方式并设置其相关属性,布局可以相互嵌套,以完成复杂页面的布局,但是嵌套层数越多,其实例化界面时相对越慢。布局是实现一个界面基本的要求,涉及到的内容也很多,这里不在进行详细陈述,只是做一个简单介绍,知道基本布局有哪些,方便根据需求进行查阅,具体内容请查阅相关文档。
4 五大存储
一个完整的应用程序,在运行过程中经常需要保存一些信息,要求这些信息掉电不丢失,这就涉及到android的存储系统,android提供了5种存储方式,分别为:
sharepreferences:这是android中保存少量信息常用的方式,其本质是文件存储,保存的信息以键值对的方式写入特定的文件中,此文件不需要开发者维护,可以保存多种类型的数据。保存的数据可以通过设置权限在同一个包内共享,不同包内无法共享相关数据。 文件存储:就是讲需要保存的数据写入特定的文件,此文件由开发者维护,方式比较灵活,开发者可以根据需求自定义文件的内容格式,甚至可以通过特定的方式对文件进行保存。文件既可以在多个应用之间共享也可以设置为私有。操作方式就是普通的文件操作。 sqlite方式:sqlite方式为方式,这是一个轻量级的嵌入式数据库,支持标准的数据库规范,支持sql语句,支持基本的对数据的增删改查操作。 网络存储系统:这种方式一般用于获取外界的数据,并不能保存软件配置相关信息(当时开发者搭建了自己的服务器,可以通过网络请求保存应用配置信息除外,因为这种方式本质就是给存储信息换了一个位置,一般没人这样开发,因为需要每次都请求服务器数据,对网络有一定的要求),如通过http请求获取当前时区,获取某一地区天气信息等。 contentprovider:看到这几个字母是不是很熟悉,没错就是内容提供者,cotentprovider是android的四大组件之一,主要用来获取数据。严格来说contentprovider并不属于存储系统,不过因为contentprovider可以获取开发者需要的信息,我们再简单介绍一下,contentprovider其实就是应用程序根据系统提供的标准接口对外封包数据。调用者不关系内容的具体实现方式,更不用关心数据的来源(数据可以是内存中的数据,也可以是其他方式保存的数据),开发者只需要按照接口规范操作数据即可。5. 不得不提的两个内容:
android 中除了以上几部分外,还有两个重要内容对于android开发人员来说不得不提,分别是fragement与thread,但不好对这两部分所属类别进行总结,所以这里标注为不得不提。在android中fragment功能与activity相似,而thread往往与service结合使用。
5.1 fragment:
虽然fragment与activity与activity的功能相似,但是fragement是在android 3.0才引入的概念。所以开发2.0版本的软件时,需要引入支持包。fragment是为了支持大屏设备引入的概念,在前面我们提到过一个屏幕就是一个activity,而且只能有一个activity,如果屏幕较大(像平板这样大屏,而且是横屏设备),要做出比较绚丽的界面,我们可能需要嵌套多层布局,这就会降低软件的响应速度,同时增加开发难度。引入fragment概念以后,可以把屏幕分解成多部分,每部分使用一个或多个fragment,最后将这些fragment通过activity把它们管理整合起来,就成了一个手机屏幕。一个最基本的应用就是某些软件应用到平板电脑,横屏时,我们会看到左侧有个导航栏。这个导航栏与右侧内容区,其实就是两个fragment,两部分可以单独开发。我们可以得出以下结论:
fragment虽然与activity功能相似,但是fragment需要依附于activity,使用时不需要进行注册 fragment是由activity管理的(fragment有自己的manager,这里说的管理是指 new与destory) 一个界面中只能有一个activity但是可以有多个fragment。 fragment与activity的生命周期不同.(请查阅详细说明,由于篇幅问题不做详细介绍)5.2 thread
前文中我们提到虽然service运行于后台,但还是在主线程中运行,所以依然不能执行执行一些耗时操作,如网络操作等。这就需要新开一个线程去执行耗时操作,在android中一般通过service管理线程,而不是使用activity管理线程。当需要使用thread执行耗时操作时,执行流程如下(我们假定此时并没有service在运行):
activity建立一个后台服务(start或者bind方式) service新建一个或多个线程,利用线程执行耗时操作,此时service有每个thread的句柄。 使用handler实现新开线程向主线程(activity或service)更新数据。(次线程不能更新界面)以上简单介绍了activity 、service以及thread三者的使用,实际开发中需要根据需求灵活运用三者,才能做到事半功倍,开发出高效率的软件。
6 总结:
本章内容简单总结了android的四大组件,五大存储系统,六大布局。以及fragment与thread,但没有对每一部分涉及到的内容进行详细介绍,只是简单介绍了相关概念以及使用场景,帮助开发者能根据需求定位需要使用哪一部分内容,详细内容可以查阅相关资料。本篇内容可以归纳为:入门级文档,帮助开发者对android系统整体有个大致认识,因为其他内容都是围绕这几部分展开的。这几部分属于android应用的骨架。也可以归纳为总结性文档,帮助对android有一定基础的人梳理其基本架构,可以通过本框架梳理每一部分的详细内容。建立更加完善的android应用框架。