四大组件
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_VIEW
content://contacts/people/1ACTION_DIAL
content://contacts/people/1ACTION_VIEW
tel:123ACTION_DIAL
tel:123ACTION_EDIT
content://contacts/people/1ACTION_VIEW
content://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()
实现