鸿蒙 Ability 讲解(Ability用途 &Page Ability讲解)

dmzhaoq1
发布于 2021-3-8 09:43
浏览
1收藏

鸿蒙开发核心之Ability详解

 

一、Ability用途


  在知道用法之前,首先你是不是得知道这个Ability怎么读?对了,Ability (音译 :阿B了D),中文意思就是能力,不要给我扯什么音标啥的,不好使,你仔细想一下,你是因为英语学得好才来当程序员的吗?To young to simple!
  Ability 是应用所具备能力的抽象,也是应用程序的重要组成部分。一个应用可以具备多种能力(即可以包含多个 Ability),HarmonyOS 支持应用以 Ability 为单位进行部署。Ability 可以分为 FA(Feature Ability)和 PA(Particle Ability)两种类型,每种类型为开发者提供了不同的模板,以便实现不同的业务功能。
  从上面一段文字,去其糟粕,取其精华之后就是两点。FA(Feature Ability)和PA(Particle Ability)

  FA(Feature Ability) (音译:非ture 阿B了D),中文意思是功能能力,它支持Page Ability 页面能力用于提供与用户交互的能力。一个Page 可以由一个或多个 AbilitySlice 构成,AbilitySlice 是指应用的单个页面及其控制逻辑的总和。

鸿蒙 Ability 讲解(Ability用途 &Page Ability讲解)-鸿蒙开发者社区鸿蒙 Ability 讲解(Ability用途 &Page Ability讲解)-鸿蒙开发者社区一个 Page 可以包含多个 AbilitySlice,但是 Page 进入前台时界面默认只展示一个AbilitySlice。默认展示的 AbilitySlice 是通过 setMainRoute() 方法来指定的。如果需要更改默认展示的 AbilitySlice,可以通过 addActionRoute() 方法为此 AbilitySlice 配置一条路由规则。此时,当其他 Page 实例期望导航到此 AbilitySlice 时,可以在 Intent 中指定 Action。addActionRoute() 方法中使用的动作命名,需要在应用配置文件(config.json)中注册:
比如鸿蒙 Ability 讲解(Ability用途 &Page Ability讲解)-鸿蒙开发者社区PA(Particle Ability) (音译:趴踢扣 阿B了D),这个里面也是支持两个能力, Service Ability 和 Data Ability 我相信你知道它们的意思,就是服务能力和数据能力。Service用于提供后台运行任务的能力。Data 用于对外部提供统一的数据访问抽象。在配置文件(config.json)中注册 Ability 时,可以通过配置 Ability 元素中的“type”属性来指定 Ability 模板类型,示例如下。其中,“type”的取值可以为“page”、“service”或“data”,分别代表 Page 模板、Service 模板、Data 模板。结合下面这个图来看知道是怎么回事了,type的属性值取决于你创建Ability是选择的类型,当然你也可以后面再改。鸿蒙 Ability 讲解(Ability用途 &Page Ability讲解)-鸿蒙开发者社区

 

二 、Page Ability讲解


现在我们知道这个Page Ability是主要负责页面交互的,那么就可以理解为Android 的Activity。那么都知道Activity有生命周期,同样的Page Ability也是的。下面来看看它的生命周期。

 

① Page Ability 生命周期


首先来看官方的一张图鸿蒙 Ability 讲解(Ability用途 &Page Ability讲解)-鸿蒙开发者社区

重点看蓝色方框的。粉红色的是当前应用的状态。
声明周期分别是onStart()、onActive()、onInactive()、onBackground()、onForeground()、onStop()

 

下面来看看详细的解释

onStart() 当系统首次创建 Page Ability实例时,触发该回调。对于一个 Page Ability实例,该回调在其生命周期过程中仅触发一次,Page Ability在该逻辑后将进入 INACTIVE 状态。开发者必须重写该方法,并在此配置默认展示的 AbilitySlice。如下图所示鸿蒙 Ability 讲解(Ability用途 &Page Ability讲解)-鸿蒙开发者社区

和onCreate有点像。

 

  • onActive()   Page Ability会在进入 INACTIVE 状态后来到前台,然后系统调用此回调。Page Ability 在此之后进入ACTIVE 状态,该状态是应用与用户交互的状态。Page Ability将保持在此状态,除非某类事件发生导致 Page Ability失去焦点,比如用户点击返回键或导航到其他 Page Ability。当此类事件发生时,会触发Page Ability回到 INACTIVE 状态,系统将调用 onInactive() 回调。此后,Page Ability可能重新回到ACTIVE 状态,系统将再次调用 onActive() 回调。因此,开发者通常需要成对实现 onActive() 和 onInactive(),并在 onActive() 中获取在 onInactive() 中被释放的资源。类似于Android的onResume。

 

  • onInactive() 当 Page Ability失去焦点时,系统将调用此回调,此后 Page 进入 INACTIVE 状态。开发者可以在此回调中实现 Page 失去焦点时应表现的恰当行为。类似于Android的onPause和onStop的集合体。

 

  • onBackground() 如果 Page Ability不再对用户可见,系统将调用此回调通知开发者用户进行相应的资源释放,此后Page Ability进入 BACKGROUND 状态。开发者应该在此回调中释放 Page Ability 不可见时无用的资源,或在此回调中执行较为耗时的状态保存操作。

 

  • onForeground() 处于 BACKGROUND 状态的 Page Ability仍然驻留在内存中,当重新回到前台时(比如用户重新导航到此 Page Ability),系统将先调用 onForeground()回调通知开发者,而后 Page 的生命周期状态回到 INACTIVE 状态。开发者应当在此回调中重新申请在 onBackground()中释放的资源,最后 Page 的生命周期状态进一步回到 ACTIVE 状态,系统将通过 onActive()回调通知开发者用户。

 

  • onStop() 系统将要销毁 Page Ability时,将会触发此回调函数,通知用户进行系统资源的释放。销毁 Page 的可能原因包括以下几个方面:
    ▪ 用户通过系统管理能力关闭指定 Page Ability,例如使用任务管理器关闭 Page Ability。
    ▪ 用户行为触发 Page Ability的 terminateAbility()方法调用,例如使用应用的退出功能。
    ▪ 配置变更导致系统暂时销毁 Page Ability并重建。
    ▪ 系统出于资源管理目的,自动触发对处于 BACKGROUND 状态 Page Ability的销毁。


OK,Page Ability 的生命周期就讲完了,具体要熟悉的话还是从实际开发中获取才行。

 

② AbilitySlice 生命周期


先来看下面这张图鸿蒙 Ability 讲解(Ability用途 &Page Ability讲解)-鸿蒙开发者社区

 说实话一开始创建项目的时候就只有这个MainAbility和HelloWorld以及slice包下的MainAbilitySlice,后来新建了一个SecondAbility,而SecondAbilitySlice是自动生成的,这说明一个问题,它们之间有不可告人的秘密。那么下面就戳穿这个秘密,摊牌了,它们是一对好基友。

 

解释:AbilitySlice 作为 Page Ability的组成单元,其生命周期是依托于其所属 Page Ability生命周期的。AbilitySlice 和 Page Ability具有相同的生命周期状态和同名的回调,当 Page Ability生命周期发生变化时,它的 AbilitySlice 也会发生相同的生命周期变化。此外,AbilitySlice 还具有独立于 Page Ability的生命周期变化,这发生在同一 Page Ability中的 AbilitySlice 之间导航时,此时 Page Ability的生命周期状态不会改变。AbilitySlice 生命周期回调与 Page Ability的相应回调类似,因此不再赘述。由于 AbilitySlice 承载具体的页面,开发者必须重写 AbilitySlice 的 **onStart()**回调,并在此方法中通过 **setUIContent()**方法设置页面,如下所示:

 

鸿蒙 Ability 讲解(Ability用途 &Page Ability讲解)-鸿蒙开发者社区

Page 与 AbilitySlice 生命周期关联

 

  当 AbilitySlice 处于前台且具有焦点时,其生命周期状态随着所属 Page Ability的生命周期状态的变化而变化。当一个 Page Ability拥
有多个 AbilitySlice 时,例如:MyAbility 下有 FooAbilitySlice 和 BarAbilitySlice,当前 FooAbilitySlice 处于前台并获得焦点,并即将导航到 BarAbilitySlice,在此期间的生命周期状态变化顺序为:

 

1、FooAbilitySlice 从 ACTIVE 状态变为 INACTIVE 状态。
2、BarAbilitySlice 则从 INITIAL 状态首先变为 INACTIVE 状态,然后变为 ACTIVE 状态(假定此前 BarAbilitySlice 未曾
启动)。
3、FooAbilitySlice 从 INACTIVE 状态变为 BACKGROUND 状态。对应两个 slice 的生命周期方法回调顺序为:
FooAbilitySlice.onInactive() --> BarAbilitySlice.onStart() --> BarAbilitySlice.onActive() -
-> FooAbilitySlice.onBackground()
在整个流程中,MyAbility 始终处于 ACTIVE 状态。但是,当 Page Ability被系统销毁时,其所有已
实例化的 AbilitySlice 将联动销毁,而不仅是处于前台的 AbilitySlice。

分类
已于2021-3-8 09:43:22修改
收藏 1
回复
举报
回复
    相关推荐