鸿蒙系统学习五-Ability的生命周期

9 篇文章 0 订阅
9 篇文章 0 订阅

Ability是鸿蒙系统的重要组成部分,分为 FA(Feature Ability)和 PA(Particle Ability)两种类型,,每种类型提供了不同的模板。如下:

  • FA: Page Ability 模板是 FA 唯一支持的模板,提供与用户交互的能力,类似Android系统中的Activity
  • PA:分为 Service Ability 和 Data Ability两种模版,Service模板:用于提供后台运行任务的能力,类似Android的后台服务Service。Data Ability用于对外部提供统一的数据访问抽象,类似Android的ContentProvider

在配置文件(config.json)中可用tpye来区分这三种类型,分别为“page”、“service”、“data”

{
    "module": {
      
        "abilities": [
            {
                "type": "page"
            }
        ]
    }
}

Page Ability

一个 Page 由一个或多个 AbilitySlice(相当于fragment) 构成,但是 Page 进入前台时界面默认只展示一个 AbilitySlice,通过 setMainRoute()方法来指定的
备注:AbilitySlice 是指应用的单个页面及其控制逻辑的总和。

public class MyAbility extends Ability {
    @Override
    public void onStart(Intent intent) {
        super.onStart(intent);
        // set the main route
        setMainRoute(MainSlice.class.getName());
      
    }
}

生命周期

如图所示:
在这里插入图片描述

onStart()

首次创建 Page 实例时,触发该回调,然后进入 INACTIVE 状态。重写该方法,并在此配 置默认展示的 AbilitySlice。

 @Override
    public void onStart(Intent intent) {
        super.onStart(intent);
        super.setMainRoute(FooSlice.class.getName());
    }
onActive()

进入前台,获取焦点,与用户可交互,INACTIVE 状态

onInactive()

Page 失去焦点时,调用此方法,Page 进入 INACTIVE 状态

onBackground()

Page 不再对用户可见

onForeground()

处于 BACKGROUND 状态的 Page 仍然驻留在内存中,当重新回到前台时(比如用户重新导航到此 Page),会调用此方法,而后 Page 的生命周期状态 回到 INACTIVE 状态。

onStop()

系统将要销毁 Page 时,将会触发此回调函数,通知用户进行系统资源的释放

AbilitySlice 生命周期

AbilitySlice 和 Page 具有相同的生命周期状态和同名的回调,同一 Page 中的 AbilitySlice 之间导航时,此时 Page 的生命周期状态不 会改变。
AbilitySlice 实例创建和管理通常由应用负责,系统仅在特定情况下会创建 AbilitySlice 实例。 例如,通过导航启动某个 AbilitySlice 时,是由系统负责实例化;但是在同一个 Page 中不同 的 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 被系统销毁时,其所有已 实例化的 AbilitySlice 将联动销毁,而不仅是处于前台的 AbilitySlice。

Service Ability

主要用于后台运行任务(如执行音乐播 放、文件下载等),但不提供用户交互界面
Service 是单实例的。在一个设备上,相同的 Service 只会存在一个实例。如果多个 Ability 共 用这个实例,只有当与 Service 绑定的所有 Ability 都退出后,Service 才能够退出。由于 Service 是在主线程里执行的,因此,如果在 Service 里面的操作时间过长,必须在 Service 里创建新的线程来处理。

生命周期

onStart()

创建的时候调用,用于初始化,只会调用一次。

onCommand()

service创建后调用,每次启动时都会调用。

onConnect()

Ability 和 Service 连接时调用,其中Ability 与 Service 交互是通过IRemoteObject对象实现的,只有第一个客户端连接 Service 时,系 统才会调用onConnect 方法来生成 IRemoteObject 对象,其他客户端连接此service时复用该IRemoteObject,无需重新调用onConnect

onDisconnect()

与Ability断开链接时调用

onStop()

Service 销毁时调用

启动Service有两种途径,生命周期都有点差别

  • 启动 Service,在 Ability 调用 startAbility()时创建,调用stopAbility()来停止,停止后会系统将其销毁
  • 连接 Service,其他 Ability 调用 connectAbility()时创建,调用 disconnectAbility()断开连接。多个客户端可以绑定到相同 Service,而且当所有绑定全部取消后,系统即会销毁该 Service。

在这里插入图片描述

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值