Android 四大组件

Android 四大组件

一、Activity —–给用户的展示页面
二、Service ——服务
三、Broadcast Receiver ——-广播接收器
四、Content Provider ——-内容提供者

除了BroadcastReceiver以外,其他三个组件都必须在AndroidManifest中注册,对于BroadcastReceiver来说它既可以在AndroidManifest中注册也可以通过代码来进行注册。
在调用方式上Activity、Service和BroadcastReceiver都需要借助Intent,而ContentProvider则无需借助Intent。

Activity

生命周期

Android 四大组件

方法解析

方法 类型 描述
onCreate 实例化 当Activity第一次启动的时候,触发该方法,完成初始化
onStart 启动 该方法的触发表示所属Activity将被展现给用户
onResume 交互 当一个Activity和用户发生交互的时候,触发该方法
onPause 挂起 当一个正在前台运行的Activity因为其他的Activity需要前台运行而转入后台运行的时候,触发该方法
onStop 停止 一个活动不再需要展示给用户的时候,触发该方法。如果系统内存紧张,则会直接结束这个Activity,而不会触发 onStop 方法。所以如果有要保存的数据时,应该在onPause时做,可以认为onPause方法或许是活动触发的最后的方法,之后就无法主观控制了
onRestart 重启 当处于停止状态的Activity需要再次展现给用户的时候,触发该方法
onDestroy 销毁 当Activity销毁的时候,触发该方法。和 onStop 方法一样,如果内存紧张,系统会直接结束这个Activity而不会触发该方法

标题栏透明的时候onStop方法内不能回收资源

Service

生命周期

Android 四大组件

使用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

  1. BroadcastReceiver是Android系统的四大组件之一,它本质上就是一个全局的监听器,用于监听系统全局的广播消息。由于BroadcastReceiver是一种全局的监听器,因此它可以方便地实现系统中不同组件之间的通信。
  2. BroadcastReceiver和事件处理机制相似,只不过事件处理机制是程序级别的的监听器,这些监听器运行在指定程序所在的进程中,当程序退出时,这些程序级别的监听器也会随之关闭。而BroadcastReceiver属于系统级别的监听器,它拥有自己的进程,只要系统中存在着与之匹配的Intent被广播出来, BroadcastReceiver总会被激发。
  3. 程序通过调用Context的sendBroadcast()方法来启动指定的BroadcastReceiver