Android 四大组件
Android 四大组件
一、Activity —–给用户的展示页面
二、Service ——服务
三、Broadcast Receiver ——-广播接收器
四、Content Provider ——-内容提供者
除了BroadcastReceiver以外,其他三个组件都必须在AndroidManifest中注册,对于BroadcastReceiver来说它既可以在AndroidManifest中注册也可以通过代码来进行注册。
在调用方式上Activity、Service和BroadcastReceiver都需要借助Intent,而ContentProvider则无需借助Intent。
Activity
生命周期
方法解析
方法 | 类型 | 描述 |
---|---|---|
onCreate | 实例化 | 当Activity第一次启动的时候,触发该方法,完成初始化 |
onStart | 启动 | 该方法的触发表示所属Activity将被展现给用户 |
onResume | 交互 | 当一个Activity和用户发生交互的时候,触发该方法 |
onPause | 挂起 | 当一个正在前台运行的Activity因为其他的Activity需要前台运行而转入后台运行的时候,触发该方法 |
onStop | 停止 | 一个活动不再需要展示给用户的时候,触发该方法。如果系统内存紧张,则会直接结束这个Activity,而不会触发 onStop 方法。所以如果有要保存的数据时,应该在onPause时做,可以认为onPause方法或许是活动触发的最后的方法,之后就无法主观控制了 |
onRestart | 重启 | 当处于停止状态的Activity需要再次展现给用户的时候,触发该方法 |
onDestroy | 销毁 | 当Activity销毁的时候,触发该方法。和 onStop 方法一样,如果内存紧张,系统会直接结束这个Activity而不会触发该方法 |
标题栏透明的时候onStop方法内不能回收资源
Service
生命周期
使用context.startService() 启动Service
其生命周期为context.startService() ->onCreate()- >onStart()->Service running–>(如果调用context.stopService() )->onDestroy() ->Service shut down
如果Service还没有运行,则android先调用onCreate()然后调用onStart();
如果Service已经运行,则只调用onStart(),所以一个Service的onStart方法可能会重复调用多次。
不管onstart()被调用多少次都不会重新创建service,这种service可以无限地运行下去,必须且只需要一次调用stopSelf()方法或者其他组件调用stopService()方法来停止它。
当service被停止时,系统会销毁它。
对于bindService()启动Service会经历:
context.bindService()->onCreate()->onBind()->Service running–>onUnbind() -> onDestroy() ->Service stop
onBind将返回给客户端一个IBind接口实例,IBind允许客户端回调服务的方法,比如得到Service运行的状态或其他操作。这个时候调用者(Context,例如Activity)会和Service绑定在一起,Context退出了,Srevice就会调用onUnbind->onDestroy相应退出。
所以调用bindService的生命周期为:onCreate –> onBind(只一次,不可多次绑定) –> onUnbind –> onDestory。一但销毁activity它就结束,如果按home把它放到后台,那他就不退出。
在Service每一次的开启关闭过程中,只有onStart可被多次调用(通过多次startService调用),其他onCreate,onBind,onUnbind,onDestory在一个生命周期中只能被调用一次。
方法解析
方法/常量 | 类型 | 描述 |
---|---|---|
START_CONTINUATION_MASK | 常量 | 继续执行Service |
START_STICKY | 常量 | 用于显式的启动和停止Service |
onBind(Intent intent) | 普通 | 设置Activity和Service之间的绑定 |
onCreate() | 普通 | 当一个Service创建时调用 |
onStartCommand(Intent intent, int flags, int startId) | 普通 | 启动Service,由startService()方法触发 |
onDestroy() | 普通 | Service销毁时调用,由stopService()方法触发 |
Service的分类
类别 | 区别 | 应用 |
---|---|---|
本地服务(Local) | 服务依附在主进程上 | 音乐播放器 |
远程服务(Remote) | 服务是独立的进程 | 一些提供系统服务的Service,这种Service是常驻的。 |
Service使用方式:
类别 | 特点 |
---|---|
通过startService 启动的Service | 后台处理工作,不进行通信,停止服务使用stopService |
通过bindService来启动的Service | 该方法启动的服务要进行通信。停止服务使用unbindService |
使用AIDL方式的Service | 进行跨进程的通信 |
Broadcast Receiver
- BroadcastReceiver是Android系统的四大组件之一,它本质上就是一个全局的监听器,用于监听系统全局的广播消息。由于BroadcastReceiver是一种全局的监听器,因此它可以方便地实现系统中不同组件之间的通信。
- BroadcastReceiver和事件处理机制相似,只不过事件处理机制是程序级别的的监听器,这些监听器运行在指定程序所在的进程中,当程序退出时,这些程序级别的监听器也会随之关闭。而BroadcastReceiver属于系统级别的监听器,它拥有自己的进程,只要系统中存在着与之匹配的Intent被广播出来, BroadcastReceiver总会被激发。
- 程序通过调用Context的sendBroadcast()方法来启动指定的BroadcastReceiver