四大组件除了BroadCastReceiver都必须在清单文件中注册
调用方式上 除了ContentProvider不需要intent外其他都需要在intent
Activity 展示型组件
启动方式 intent 显示和隐式 显示意图明确指向一个 隐式可以一个或多个activity组件;
Service 计算型组件 后台执行
两种状态 绑定和启动 两种状态可以共存;
启动状态主要用来执行后台计算
绑定状态主要用来其他组件和service的交互;
onCreate onStartCommand onDestroy方法;
onCreate方法只会调用一次;
远程Service 清单文件中的process属性 设置为remote;
BroadCastReceiver 消息型组件 没有停止概念
注册方式 静态注册和动态注册两种
BroadcastReceiver的工作过程包括广播注册过程、广播发送和接收过程。
静态注册无论程序是否启动都会接受广播而动态注册的广播只有在当程序运行的时候才会接收到广播信息
静态注册是由PackageManagerService(PMS)在应用安装的时候完成整个注册过程的,
除广播以外,其他三大组件也都是在应用安装时由PMS解析并注册的。
广播的发送有几种类型:普通广播、有序广播和粘性广播,有序广播和粘性广播与普通广播相比具有不同的特性,但是发送和接收过程是类似的。
FLAG_INCLUDE_STOPPED_PACKAGES:广播会发送给已经停止的应用,FLAG_EXCLUDE_STOPPED_PACKAGES广播不会发送给已经停止的应用
从Android 3.1开始,处于停止状态的应用无法接受到开机广播。
ContentProvider 数据共享型组件
内部维持着一个数据型集合可以通过数据库来实现 有增删改查四种操作;不需要手动停止;
BroadCastReceiver动态注册过程 BroadCastReceiver发送和接受 contentProvider当ContentProvider所在的进程启动时,会同时被启动并被发布到AMS中,需要注意的是,这个时候它的onCreate要先去Application的onCreate执行,这在四大组件中是一个少有的现象。
用启动的入口为ActivityThread的 main方法,main方法会创建ActivityThread实例并创建主线程消息队列。
attach方法中远程调用AMS的attachApplication方法,并提供ApplicationThread用于和AMS的通信。
attachApplication方法会通过bindApplication方法和H来调回ActivityThread的handleBindApplication,这个方法会先创建Application,再加载ContentProvider,然后才会回调Application的onCreate方法。
ContentProvider的multiprocess属性决定了ContentProvider是否是单例(false时),一般都用单例。
ontentResolver的具体类是ApplicationContentResolver,当ContentProvider所在进程未启动时,第一次访问它会触发ContentProvider的创建以及进程启动。
图片来源与网络
网友评论