鸿蒙 鸿蒙 OS 浅出学习笔记(四)

狂天 · 2021年06月18日 · 1827 次阅读

十二、Ability 概述
一个应用可以有多个 Ability。
Ability 分为两种类型 FA(Feature Ability), PA(Particle Ability)
每种类型都提供了不同的模板,供开发者使用。
FA:只有 Page 模板,用于提供与用户交互的能力,一个 Page 实例可包含一组页面,每个页面用一个 AbilitySlice 实例表示。
PA:支持两个模板
Service 模板:后台运行任务。
Data 模板:对外部提供统一的数据访问。

至于这个 Ability 究竟是上面三种的哪一种,通过配置表示。

Page 结构
当一个 Page 中包含多个 AbilitySlice 时,这些 AbilitySlice 应该具有较大的功能相关性,比如:外卖列表和外卖详情页面两个 AbilitySlice 都放在一个 Page 里。

AbilitySlice 路由配置:
进入 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());
    }
}

跳转到其他 AbilitySlice:

@Override
protected void onStart(Intent intent) {

    ...
    Button button = ...;
    //通过present方法,里面的intent可以直接传新对象,
    //也可以传输信息
    button.setClickedListener(listener -> present(new TargetSlice(), new Intent()));
    ...
}

Page 生命周期
系统管理或用户操作均会引起 Page 实例改变生命周期状态。

onStart():
仅在系统第一次创建 Page 实例调用,调用后 Page 进入 INACTIVE 状态。开发时必须重写此方法,并声明默认展示的 AbilitySlice。
示例:

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

onActive():
Page 进入 INACTIVE 状态后,自动调用该方法,进入 ACTIVE 状态。这个状态就是应用与用户交互的状态,Page 会一直保持这个状态,除非失去焦点。

onInactive():
失去焦点时调用这个方法。

onBackground():
Page 对用户不可见时,系统自动调用该方法通知开发者进行相应的资源释放。

onForeground():
后台运行回到前台时,系统调用该方法,该方法用于开发者重新申请不可见时释放的资源,然后系统调用 onActive 方法通知开发者。

onStop():
关闭 Page 时调用,通知进行资源释放。
关闭有 4 种情况:
1.任务管理器关闭
2.从应用中退出
3.配置改变
4.系统管理资源时自动触发关闭

AbilitySlice 生命周期:
AbilitySlice 是 Page 的组成部分,它的生命周期和 Page 一样。当同一 Page 下的 AbilitySlice 切换时,AbilitySlice 生命周期改变,Page 生命周期不改变。
例如:
HelloAbility 下的 HelloAAbilitySlice 和 HelloBAbilitySlice。HelloAAbilitySlice 当前获得焦点再导航至 HelloBAbilitySlice,它们生命周期变化是:
1.HelloAAbilitySlice 从 ACTIVE 变成 INACTIVE
2.HelloBAbilitySlice 从 INACTIVE 变成 ACTIVE
3.HelloAAbilitySlice 从 INACTIVE 变成 BACKGROUND

鸿蒙 OS 跨设备迁移
鸿蒙 OS 可以将 Page 在用户的不同设备间来回切换。
步骤:
1.设备 A 请求迁移
2.鸿蒙 OS 处理请求,并保存设备 A 的数据。
3.鸿蒙 OS 在设备 B 启动同一个 Page,并恢复数据

具体实现:
使用 IAbilityContinuation 接口。
onStartContinuation():
Page 请求迁移后,首先调用此方法,开发者在此决策是否开始迁移。

onSaveData()
上个方法返回 True,开始调用这个方法,用于保存数据。

onRestoreData()
保存好数据后,在目标端调用这个方法,恢复之前保存的数据。

onCompleteContinuation()
目标端数据恢复完成后调用此方法通知迁移结束。

onRemoteTerminated()
用于源端进行回迁。

暂无回复。
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册