1.3 Android App组件架构
前面讲解了Android的系统架构,而在应用层,Android的App组件架构,通常就是我们所说的Android四大组件,指的是Activity、BroadCastReciever、ContentProvider和Service,它们是组成一个Android App的最基本元素。
1.3.1 Android四大组件如何协同工作
Android中的四大组件的使用方法与适用场景都各不相同,但它们之间也保持着紧密的联系,你中有我,我中有你,紧密而不可分。
Activity作为人机交互的第一界面,负责向用户展示信息和处理结果,而这些信息的来源,可以是通过资源获取,也可以通过Content Provider来获取其他应用的信息,或是Service从后台计算、下载、处理的结果,当然也可以是通过BroadCast Reciever获取到的广播信息。同时,Android系统还提供了一个信使——Intent,作为信息传递的载体。组件与组件之间通过Intent来通信、传递信息、交换数据,正是通过这样一种方式,四大组件形成了各自独立而又紧密联系的关系,让整个Android系统“活”了起来。
Android的四大组件在开发者的调度下,共同完成着开发者赋予它们的使命,它们之间没有孰优孰劣,所有的组件存在的道理就是为了让程序能够更好地实现开发者的功能。当然,熟知每个组件的功能、特点,才能在使用时运筹帷幄。在这里,大家只需要对四大组件的协同工作模式有个基本的概念即可,随着本书的讲解,大家会慢慢掌握这些组件的使用技巧。
1.3.2 应用运行上下文对象
在高中的时候,语文课本上经常会出现这样一句话——“请联系上下文,分析这句话在文中的作用”,那么这个“上下文”到底是指什么意思呢?在语文中,我们可以理解为语境,在程序中,我们可以理解为当前对象在程序中所处的一个环境,一个与系统交互的过程。
Android系统的上下文对象,即在Context中,为我们封装了这样一个“语境”。Activity、Service、Application都是继承自Context。
Android应用程序会在如下所示的几个时间点创建应用上下文Context。
- 创建Application
- 创建Activity
- 创建Service
不难发现,创建Context的时机就是在创建Context的实现类的时候。当应用程序第一次启动时,Android系统都会创建一个Application对象,同时创建Application Context,所有的组件都共同拥有这样一个Context对象,这个应用上下文对象贯穿整个应用进程的生命周期,为应用全局提供了功能和环境支持。而创建Activity和Service组件时,系统也会给它们提供运行的上下文环境,即创建Activity实例、Service实例的Context对象。所以很多读者在Activity中获取Context对象时,可以直接使用this,而在匿名内部类中,就必须指定XXXXActivity.this才可以获得该Activity的Context对象。当然,你也可以通过getApplicationContext()方法来获取整个App的Context,但是通过getApplicationContext()方法获得的是整个应用的上下文引用,这与某个组件的上下文引用,在某些时候还是有区别的。
