# 四大组件
# Activity
# Activity 是什么
Activity 是 Android 中重要的组件之一,它在 APP 开发中扮演者不可缺少的角色,可以说就是我们的可见界面。
Activity 中包括了 UI 的展示、用户的交互设置、数据的逻辑处理等等。
# Activity 的生命周期
| onCreate:当 activity 被创建会调用该方法,在该函数中会调用 setContentView (view:View) 进行界面 UI 设置。 |  | 
|---|
# Activity 中 Intent 是什么?
Intent 常用于两个组件之间的交互,可以启动服务、启动 Activity、启动广播。也可用于 启动服务 以及 绑定服务 去与后台服务进行通信。意图实际上是提供了不同程序之间的运行时绑定,更多的使用在启动 Activity。
Intent 的结构:
- 
action : 可以执行一些通用的行为,例如 ACTION_VIEW、ACTION_EDIT、ACTION_MAIN 
- 
data: 传输需要处理的数据,例如: ACTION_VIEWcontent://contacts/people/1ACTION_DIALcontent://contacts/people/1ACTION_VIEWtel:123ACTION_DIALtel:123ACTION_EDITcontent://contacts/people/1ACTION_VIEWcontent://contacts/people/
- 
category : 给定其他有关行为去执行例如: CATEGORY_LAUNCH、CATEGORY_ALTERNATIVE 
- 
type : 生命 MINI type 
- 
component 少用 
- 
extra: 使用 bundle 存储额外的信息,可以在不同组件间传输少量数据 
# Service
# Service 是什么?
Service 是 Android 中可以在后台执行长时运行操作而不提供界面的组件。可以由其他组件启动。并且用户切换到其他应用,服务仍然会在后台运行。
此外,服务可以进行进程间通信【IPC】,常用在处理网络事务、音乐播放、执行 IO 与内容提供程序的交互。
# Service 的分类?
可以分为三种类型。
- 
前台服务:前台服务执行一些用户可观测的操作,例如音频软件会使用前台服务播放。前台服务必须显示通知。即使用户停止与应用的交互,前台服务仍会继续运行。 
- 
后台服务:后台服务执行用户不能注意到的操作,例如,如果应用使用某个服务来压缩其存储空间,则此服务通常是后台服务。 
- 
绑定服务:当应用组件通过调用 bindService()绑定到服务时,服务即处于绑定状态。绑定服务会提供客户端 - 服务器接口,以便组件与服务进行交互、发送请求、接收结果,甚至是利用进程间通信 (IPC) 跨进程执行这些操作。仅当与另一个应用组件绑定时,绑定服务才会运行。多个组件可同时绑定到该服务,但全部取消绑定后,该服务即会被销毁。
有一种情况是,既可以是启动服务(以无限期运行),亦支持绑定。唯一的问题在于您是否实现一组回调方法: onStartCommand() (让组件启动服务)和  onBind() (实现服务绑定)。
# Service 的生命周期
 
onStartCommand:当另一个组件调用 startService 启动服务时,该服务会启动并一直运行,直到调用 stopSelf () 或者 stopService ()
onBind:当另一个组件想要与服务绑定(例如执行 RPC)时,系统会通过调用  bindService()  来调用此方法。在此方法的实现中,您必须通过返回  IBinder  提供一个接口,以供客户端用来与服务进行通信。
onCreate:首次创建服务时,系统会(在调用  onStartCommand()  或  onBind()  之前)调用此方法来执行一次性设置程序。如果服务已在运行,则不会调用此方法。
onDestroy:当不再使用服务且准备将其销毁时,系统会调用此方法。服务应通过实现此方法来清理任何资源,如线程、注册的侦听器、接收器等。这是服务接收的最后一个调用。
使用时必须在 Manifest 中注册服务
# IntentService
intentService 是对 Service 的一个封装
由于大多数启动服务无需同时处理多个请求(实际上,这种多线程情况可能很危险),因此最佳选择是利用  IntentService  类实现服务。
IntentService  类会执行以下操作:
- 创建默认的工作线程,用于在应用的主线程外执行传递给  onStartCommand()的所有 Intent。
- 创建工作队列,用于将 Intent 逐一传递给  onHandleIntent()实现,这样您就永远不必担心多线程问题。
- 在处理完所有启动请求后停止服务,因此您永远不必调用  stopSelf()。
- 提供  onBind()的默认实现(返回 null)。
- 提供  onStartCommand()的默认实现,可将 Intent 依次发送到工作队列和onHandleIntent()实现
