Android四大组件:
- Activity(活动)
- Service(服务)
- ContentProvider(内容提供者)
- BroadcastReceiver(广播接收者)
四大组件在使用的时候都需要在AndroidManifest.xml的application中进行注册:
<activity android:name = "">......</activity>
<service android:name = "">......</sevice>
<provider android:name = "">......</provider>
<receiver android:name = "">.......</receiver>
Activity
- Activity展示为可视化用户界面,通过程序与用户交互的窗口。
如我们打开手机联系人,我们所看到的的界面就是Activity,联系人里面的内容如老王、老李等消息人列表以及各种按钮都是放在Activity这个容器里面的,我们可以在这个Activity上通过滑动列表,点击按钮等操作来和应用程序进行交互。 - 一个Activity占据当前的窗口,响应所有窗口事件,具备控件、菜单等界面元素。
负责接收用户的操作,点击、滑动等操作都是通过Activity来传递给相应的组件,但是这些组件必须放在Activity里面。 - Activity需要保存数据和调用系统等功能、妥善管理生命周期和实现界面之间的跳转逻辑等。
在应用里一般会有多个界面,一个界面对应一个Activity,Activity自行管理这个界面的生命周期,也就是管理这个界面什么时候创建、显示、销毁等。界面之间的跳转即不同Activity之间的跳转,通常通过Intent来进行显示或隐式跳转。 - 对于开发者而言,一般创建Activity的子类如
public class MainActivity extends AppCompatActivity
,在其基础上定义界面布局、添加业务逻辑等。
Service
- 运行在后台的一个组件。
这里的“后台”其实是相对于Activity而言的,Activity是用户可以看得到,碰得到的一个组件,而Service恰恰相反,用户看不到也碰不到。 - 封装有完整的功能逻辑实现,就像没有界面的Activity。
- 一般用于执行长时间运行且不需要提供用户界面的操作,如后台下载、后台播放音乐等。
- 通过Intent与其他组件进行通信。
Intent是一个通用的通信机制,可以用于在不同的组件中进行通信。 - 支持同步和异步的消息机制。
同步:老王向老李发出请求服务后,老王会一直等待,直到老李完成这个服务操作并把结果返回给老王,然后老王去处理结果。
异步:老王向老李发出请求服务后,老王可以去做别的事情,老李完成服务操作并返回结果给老王后,老王再去处理结果。
BroadcastReceiver
- 广播接收者无界面,不执行复杂的逻辑操作,一般都是启动或者发送一些消息给其他的组件,由它们来完成复杂的逻辑。充当了一个消息管道的作用。
- 各个组件都可以对其感兴趣的事件进行注册,事件发生时,大家通过BroadcastReceiver机制接收其消息。
比如说某个组件对系统电池的状态比较感兴趣,那它就可以在系统里进行注册,说我对系统的电池状态感兴趣,当电池的状态发生变化的时候,系统就会自动地向订阅者发送相应的信息,然后这个应用就可以对信息进行处理。通过这种方式,就实现了一种异步的通信机制。
Content Provider
- 在Android中作为应用程序之间共享数据的系统机制。
- 每个Android应用独立运行,通过它存储并检索数据并向其它应用程序提供访问数据的接口。
比如说联系人的应用程序,它的Content Provider存储了其他人的联系方式、姓名等,当拨号程序等其它程序需要这些信息时,就可以通过联系人的Content Provider来获取。 - Android系统提供诸多功能的Content Provider,比如音频文件、视频、图片和私人通讯录等。
拓展
Android的Intent
- 负责在相同或不同的组件之间传递消息,包含具体请求信息的对象。可以理解为一个传递消息的容器。
- 系统提供的协助完成应用间的交互调用与通讯的一种机制。
- 针对不同的组件,Intent所包含的消息内容、类型、激活机制都有所不同
- 在不同的活动和组件之间起着媒体中介的作用,专门提供组件互相调用的相关信息。