四大组件

Activity

Activity 是什么

Activity 是Android 中重要的组件之一,它在APP开发中扮演者不可缺少的角色,可以说就是我们的可见界面。

Activity 中包括了UI的展示、用户的交互设置、数据的逻辑处理等等。

Activity的生命周期

onCreate:当activity 被创建会调用该方法,在该函数中会调用setContentView(view:View) 进行界面UI设置。
onRestart:当用户移动到其他的界面再回到该界面时会调用该函数
onStart: 当走到这一周期函数时,用户可以看到界面,但是不能够进行交互
onResume: 当调用该函数后,用户可以进行交互
onPause:当当前界面失去焦点,但是可见时,该方法会被调用
onStop:当用户离开该界面,会在离开之后的界面展示的 onStart 函数后调用
onDestroy:当前Activity 因为不使用导致系统GC销毁或者被手动 finish 后会被调用

image-20230521220952700

Activity 中 Intent 是什么?

Intent 常用于两个组件之间的交互,可以启动服务、启动 Activity、启动广播。也可用于 启动服务 以及 绑定服务 去与后台服务进行通信。意图实际上是提供了不同程序之间的运行时绑定,更多的使用在启动 Activity。

Intent 的结构:

  • action : 可以执行一些通用的行为,例如 ACTION_VIEW、ACTION_EDIT、ACTION_MAIN

  • data: 传输需要处理的数据,例如:

    ACTION_VIEW content://contacts/people/1

    ACTION_DIAL content://contacts/people/1

    ACTION_VIEW tel:123

    ACTION_DIAL tel:123

    ACTION_EDIT content://contacts/people/1

    ACTION_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 的生命周期

image-20230521231757499

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() 实现

BroadCastReceiver

更新于 阅读次数

请我喝[茶]~( ̄▽ ̄)~*

Jone Loucy 微信支付

微信支付

Jone Loucy 支付宝

支付宝

Jone Loucy 贝宝

贝宝