1. 概述:

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

2. 四大组件

Android的四大组件主要包括:

  1. Activity
  2. Service
  3. Content Provider
  4. 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存在一定的关联。这种关联主要有两种情况:

  1. 绑定:Activity与Service需要经常进行数据交换,且两者不求同时生但求同时死,即关闭Activity时,也不需要使用Service提供的相关数据或完成相应功能
  2. 启动:一般用于两者可能只进行少量数据交换,甚至只进行一次数据交换,Activity启动Service以后不需要关注Service的状态,Service完成Activity指定的功能即可。

  区别:绑定任务与启动任务Service执行的函数不同。

  1. bindService(绑定服务):执行OnBind();
  2. startService(启动服务):执行onStartCommand();

绑定或者启动服务后,服务就开始在后台执行。

2.3 Broadcast Receiver

Boradcast Receiver为广播与广播接收者,其实这个组件包括两部分,分别为Broadcast:广播,Receiver:广播接收者,我们可以通过生活中的电台与收音机做一个形象的类比,Broadcast就相当于我们生活中的电台,电台发送的是电磁波,里面携带语音消息等内容,而Android的Broadcast发送的是Intent,里面也携带了接受者感兴趣的消息。而Receiver相当于收音机,收音机接收到的是电磁波,并分析出其中携带的各种消息进行播放,而Android中的Receiver接收到Intent,也解析出其中携带的信息,并执行相应的操作。其中Broadcast Reciver的接收者也需要进行注册,主要分为两种方式:

  1. 静态注册:静态注册是在AndroidMainfest.xml文件中进行注册,通过静态注册即使实现Receiver的Activity没有启动,也会执行相关操作。
  2. 动态注册:动态注册是在需要接受广播的Activity中通过代码注册,动态注册时,当注册了广播接收者的Activity没有启动时,广播接收者不会接收到相关广播,更不会执行相关操作。

2.4 Content Provider

Content Provider中文名为内容提供者,根据中文名我们大胆推测:这个组件是为应用提供数据的。正如我们推测的一样,Content Provider正是为应用提供数据共享。实现应用间的数据共享,例如:应用获取手机中的通讯录信息通过Content Provider 可以统一应用间数据共享的方式与接口,使用时也需要进行注册。

  1. Android没有提供不同应用间共享内存的概念,所有可以通过Content Provider实现数据的共享
  2. 多个不同应用需要获取同一共享数据,通过唯一标识URI实现,URI以 content:// 作为前缀,该前缀表示数据由Content Provider管理
  3. 开发者一般不直接使用Content Provoder实现数据保存,管理和读取,而是通过CoententResolver实现对Content Provider的操作
总结:

  四大组件都必须要注册才能够使用且都可以在AndroidMainfest.xml中实现静态注册,通过静态注册的组件与系统的整个生命周期相同,只要接收到相应广播都会执行相关操作,无论组件所依附的应用或组件处于什么状态,而Boardcast Receiver还可以动态注册,通过动态注册的组件依附于注册组件的生命周期,


3. 六大布局

  Android开发既要完成相应功能,还要使界面尽可能美观,要完成相关需求,就必须掌握Android布局与自定义组件相关内容。这里我们主要介绍Android布局相关内容。Android主要有两种方式实现布局:分别为:xml方式Java代码方式建议使用xml实现界面中的静态部分,尽可能使用xml实现布局,既可以减少资源消耗,还可以提高响应速度。无论使用哪种方式实现,都需要对界面进行布局,Android包含以下6种布局方式:

  1. LinearLayout:线性布局,分为横向和纵向两个方向。
  2. RelativeLayout:相对布局。
  3. FrameLayout:帧布局。
  4. TableLayout:表格布局
  5. GridLayout:网格布局(Android 4.0新增)
  6. AbsoluteLayout:绝对布局,不建议使用。

  六种布局方式既有共同属性,又有其特殊属性,可以根据需求选择相关布局方式并设置其相关属性,布局可以相互嵌套,以完成复杂页面的布局,但是嵌套层数越多,其实例化界面时相对越慢。布局是实现一个界面基本的要求,涉及到的内容也很多,这里不在进行详细陈述,只是做一个简单介绍,知道基本布局有哪些,方便根据需求进行查阅,具体内容请查阅相关文档。


4 五大存储

  一个完整的应用程序,在运行过程中经常需要保存一些信息,要求这些信息掉电不丢失,这就涉及到Android的存储系统,Android提供了5种存储方式,分别为:

  1. SharePreferences:这是Android中保存少量信息常用的方式,其本质是文件存储,保存的信息以键值对的方式写入特定的文件中,此文件不需要开发者维护,可以保存多种类型的数据。保存的数据可以通过设置权限在同一个包内共享,不同包内无法共享相关数据。
  2. 文件存储:就是讲需要保存的数据写入特定的文件,此文件由开发者维护,方式比较灵活,开发者可以根据需求自定义文件的内容格式,甚至可以通过特定的方式对文件进行加密保存。文件既可以在多个应用之间共享也可以设置为私有。操作方式就是普通的文件操作。
  3. SQLite方式:SQLite方式为数据库方式,这是一个轻量级的嵌入式数据库,支持标准的数据库规范,支持SQL语句,支持基本的对数据的增删改查操作。
  4. 网络存储系统:这种方式一般用于获取外界的数据,并不能保存软件配置相关信息(当时开发者搭建了自己的服务器,可以通过网络请求保存应用配置信息除外,因为这种方式本质就是给存储信息换了一个位置,一般没人这样开发,因为需要每次都请求服务器数据,对网络有一定的要求),如通过HTTP请求获取当前时区,获取某一地区天气信息等。
  5. 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,两部分可以单独开发。我们可以得出以下结论:

  1. Fragment虽然与Activity功能相似,但是Fragment需要依附于Activity,使用时不需要进行注册
  2. Fragment是由Activity管理的(Fragment有自己的Manager,这里说的管理是指 new与destory)
  3. 一个界面中只能有一个Activity但是可以有多个Fragment。
  4. Fragment与Activity的生命周期不同.(请查阅详细说明,由于篇幅问题不做详细介绍)
5.2 Thread

  前文中我们提到虽然Service运行于后台,但还是在主线程中运行,所以依然不能执行执行一些耗时操作,如网络操作等。这就需要新开一个线程去执行耗时操作,在Android中一般通过Service管理线程,而不是使用Activity管理线程。当需要使用Thread执行耗时操作时,执行流程如下(我们假定此时并没有Service在运行):

  1. Activity建立一个后台服务(start或者bind方式)
  2. Service新建一个或多个线程,利用线程执行耗时操作,此时Service有每个Thread的句柄。
  3. 使用handler实现新开线程向主线程(Activity或Service)更新数据。(次线程不能更新界面

  以上简单介绍了Activity 、Service以及Thread三者的使用,实际开发中需要根据需求灵活运用三者,才能做到事半功倍,开发出高效率的软件。

6 总结:

  本章内容简单总结了Android的四大组件,五大存储系统,六大布局。以及Fragment与Thread,但没有对每一部分涉及到的内容进行详细介绍,只是简单介绍了相关概念以及使用场景,帮助开发者能根据需求定位需要使用哪一部分内容,详细内容可以查阅相关资料。本篇内容可以归纳为:入门级文档,帮助开发者对Android系统整体有个大致认识,因为其他内容都是围绕这几部分展开的。这几部分属于Android应用的骨架。也可以归纳为总结性文档,帮助对Android有一定基础的人梳理其基本架构,可以通过本框架梳理每一部分的详细内容。建立更加完善的Android应用框架。