一、Activity
Activity是一种展示型组件,具有两种启动方式:
- 显示启动,通过Intent实现
- 隐式启动,也需要Intent,但还需要在AndroidManifest.xml中添加IntentFilter。
在实现Activity时,需要继承Activity抽象类,并重写onCreate()方法,因而Activity具有启动和停止概念。
二、Service
Service是一种计算型组件,其生命周期是嵌套在主线程的。
Service有两种启动模式
- 启动状态
- 绑定状态
注意:在AndroidManifest.xml中注册Service时,只需要注册服务的类名即可。
启动状态和绑定状态的区别在于:
启动之后,Service的动作不受Activity的控制(startService)
绑定之后,Service的动作是由Activity控制的(bindService)
在实现Service时,需要继承Service抽象类,并重写onBind()方法,因而Service也具有启动和停止的概念。
三、BroadcastReceiver
BroadcastReceiver是一种消息型组件。由于BroadcastReceiver可以在不同的组件甚至不同的应用之间传递消息,所以其可以脱离Activity实现,除了要在AndroidManifest.xml中注册广播类名外,还需要添加IntentFilter,这样就可以让Receiver选择性的接受广播。当注册完成后,及时没有Activity启动,也可以接受广播。
在实现BroadcastReceiver时,需要继承BroadcastReceiver抽象类,但是不需要重写onCreate()方法,只要重写onReceive()方法即可。因此BroadcastReceiver没有启动和停止的概念,更像是一个系统级的监听器。
四、ContentProvider
ContentProvider是一种数据共享性组件,可以在应用之间共享数据,所以与BroadcastReceiver一样,其可以脱离Activity实现。在实现ContentProvider时,需要继承ContentProvider抽象类,然后在AndroidManifest.xml中注册类名和ContentProvider的域名。
该类需要重写六个方法,即onCreate(),query(),insert(),update(),delete(),getType()
与前三个组件不同,ContentProvider没有使用intent,而是使用URI来判断能否为ContentResolver提供数据共享。
总结:
- Activity和Service有生命周期,而BroadcastReceiver与ContentProvider采用监听机制,没有生命周期
- 四大组件都需要在AndroidManifest.xml中注册
- 除了ContentProvider外,其他组件都要用到intent
- 四大组件实现时都要继承其抽象的父类
- Service与Activity关系最为密切,BroadcastReceiver和ContentProvider的实现基本不依赖与Activity。