Android 四大组件及其相关
【一】Activity
#1 生命周期
参考:https://blog.csdn.net/liuhe688/article/details/6733407
#2 activity 与fragment生命周期对比
#3 启动模式
*1 standard 标准启动模式
*2 singleTop 单一栈顶启动模式
*3 singleTask 单一栈的启动模式
*4 singleInstance 单一实例的启动模式
*1 standard 标准启动模式
standard是Activity默认的启动模式,在不指定Activity启动模式的情况下,所有Activity使用的都是standard模式。
在standard模式下,每当启动一个新的Activity,它就会进入任务栈,并处于栈顶的位置,对于使用standard模式的Activity,系统不会判断该Activity在栈中是否存在,每次启动都会创建一个新的实例
*2 singleTop 单一栈顶的启动模式
singleTop模式与standard类似,不同的是,当启动的Activity已经位于栈顶时,则直接使用它不创建新的实例。如果启动的Activity没有位于栈顶时,则创建一个新的实例位于栈顶
*3 singleTask 单一任务栈的启动模式
如果希望Activity在整个应用程序中只存在一个实例,可以使用singleTask模式,当Activity的启动模式指定为 singleTask,每次启动该Activity时,系统首先会检查栈中是否存在该Activity的实例,如果发现已经存在则直接使用该实例,并将当前Activity之上的所有Activity出栈,如果没有发现则创建一个新的实例。
*4 singleInstance 单一实例的启动模式
在程序开发过程中,如果需要Activity在整个系统中都只有一个实例,这时就需要用到singleInstance模式。不同于以上介绍的三种模式,指定为singleInstance模式的Activity会启动一个新的任务栈来管理这个Activity。
singleInstance模式加载Activity时,无论从哪个任务栈中启动该Activity,只会创建一个Activity实例,并且会使用一个全新的任务栈来装载该Activity实例。采用这种模式启动Activity会有两种情况:
第一种:如果要启动的Activity不存在,系统会创建一个新的任务栈,在创建该Activity的实例,并把该Activity加入栈顶
第二种:如果要启动的Activity已经存在,无论位于哪个应用程序或者哪个任务栈中,系统都会把该Activity所在的任务栈转到前台,从而使该Activity显示出来。
【二】Service
#1 生命周期
*1 service分为绑定的和非绑定的服务,非绑定的也就是普通的,绑定的是一种和activity联系比较紧密的
*2 BroadcastReceiver 只能通过startSrvicce启动service,因为广播本身的生命周期很短,bind的话,没有意义
#2 远程Service通信(进程间Service通信)
两个进程间的Service进行通信需要把对象序列化之后进行互相发送,android提供了一个AIDL工具来处理序列化和通信,这种情况下service需要以aidl文件的方式提供服务接口。AIDL工具会根据aidl文件自动生成一个相应的java接口,并且在生成的服务接口中包含一个功能调用的stub服务桩类。Service的实现类需要去继承这个stub服务桩类。Service的onBind方法会返回实现类的对象。当客户端应用连接到这个service时,onServiceConnected方法会被调用,客户端就可以获得IBindr对象(也就是服务端应用程序的服务)
AIDL(Android Interface Definition Language)是Android接口定义语言的意思,它可以用于让某个Service与多个应用程序组件之间进行跨进程通信,从而可以实现多个应用程序共享同一个Service的功能。
#3 启动方式
显示启动和隐式启动
【三】BroadcastReceiver
【四】ContentProvider