赞
踩
Ability是鸿蒙系统的重要组成部分,分为 FA(Feature Ability)和 PA(Particle Ability)两种类型,,每种类型提供了不同的模板。如下:
在配置文件(config.json)中可用tpye来区分这三种类型,分别为“page”、“service”、“data”
{
"module": {
"abilities": [
{
"type": "page"
}
]
}
}
一个 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());
}
}
如图所示:
首次创建 Page 实例时,触发该回调,然后进入 INACTIVE 状态。重写该方法,并在此配 置默认展示的 AbilitySlice。
@Override
public void onStart(Intent intent) {
super.onStart(intent);
super.setMainRoute(FooSlice.class.getName());
}
进入前台,获取焦点,与用户可交互,INACTIVE 状态
Page 失去焦点时,调用此方法,Page 进入 INACTIVE 状态
Page 不再对用户可见
处于 BACKGROUND 状态的 Page 仍然驻留在内存中,当重新回到前台时(比如用户重新导航到此 Page),会调用此方法,而后 Page 的生命周期状态 回到 INACTIVE 状态。
系统将要销毁 Page 时,将会触发此回调函数,通知用户进行系统资源的释放
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 是单实例的。在一个设备上,相同的 Service 只会存在一个实例。如果多个 Ability 共 用这个实例,只有当与 Service 绑定的所有 Ability 都退出后,Service 才能够退出。由于 Service 是在主线程里执行的,因此,如果在 Service 里面的操作时间过长,必须在 Service 里创建新的线程来处理。
创建的时候调用,用于初始化,只会调用一次。
service创建后调用,每次启动时都会调用。
Ability 和 Service 连接时调用,其中Ability 与 Service 交互是通过IRemoteObject对象实现的,只有第一个客户端连接 Service 时,系 统才会调用onConnect 方法来生成 IRemoteObject 对象,其他客户端连接此service时复用该IRemoteObject,无需重新调用onConnect
与Ability断开链接时调用
Service 销毁时调用
启动Service有两种途径,生命周期都有点差别
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。