欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android 应用开发重要组成解析

程序员文章站 2022-05-02 16:33:31
1. 概述: 前期一边学习,一边进行过android应用的开发。后来由于各种原因,在一段时间内放下了android应用的开发,后来再次拿起来的时候明显感觉陌生了很多,可能是长时间没接触的原因,亦或者...

1. 概述:

前期一边学习,一边进行过android应用的开发。后来由于各种原因,在一段时间内放下了android应用的开发,后来再次拿起来的时候明显感觉陌生了很多,可能是长时间没接触的原因,亦或者是基础薄弱的原因,所以感觉有必要整理一下android应用开发相关内容。帮助自己建立一个系统完整的概念。这里主要介绍android中必须掌握,也是常用的四大,五大存储,六大布局,以及另外两个重要组成部分。本文章并不会对每部分进行详细介绍,主要简单陈述各组成部分的概念、功能,方便开发者建立整体概念,并在使用时可以通过本文档与需求功能确定使用那一部分。详细内容请自行查阅相关资料或后续针对每部分的详细文档。

2. 四大组件

android的四大组件主要包括:

activity service content provider broadcast receiver
2.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应用框架。