ServiceAbility切换

FA模型中的ServiceAbility对应Stage模型中的ServiceExtensionAbility。Stage模型下的ServiceExtensionAbility为系统API,只有系统应用才可以创建。因此,FA模型的ServiceAbility的切换,对于系统应用和三方应用策略有所不同。下面分别介绍这两种场景。

系统应用ServiceAbility切换

目前系统提供了ServiceExtensionAbility供系统应用使用。切换步骤和PageAbility基本一致。

  1. 在Stage应用中 创建ServiceExtensionAbility 。

  2. 将FA应用中ServiceAbility的业务代码迁移到新创建的ServiceExtensionAbility中。 ServiceAbility和ServiceExtensionAbility生命周期对比见下表。

    FA的ServiceAbility Stage的ServiceExtensionAbility 对比描述
    onStart(): void onCreate(want: Want): void 两者调用时机一致,Stage模型下增加了入参want以便开发者在创建时获取参数。
    onCommand(want: Want, startId: number): void onRequest(want: Want, startId: number): void 两者意义和调用时机一致,参数也一致。
    onConnect(want: Want): rpc.RemoteObject onConnect(want: Want): rpc.RemoteObject 两者意义和调用时机一致,参数也一致。
    onDisconnect(want: Want): void onDisconnect(want: Want): void 两者意义和调用时机一致,参数也一致。
    onReconnect(want: Want): void onReconnect(want: Want): void 两者意义和调用时机一致,参数也一致。
    onStop(): void onDestroy(): void 两者意义和调用时机一致,参数也一致。

三方应用ServiceAbility切换

Stage模型下三方应用不能对其他三方提供服务,应用可以根据具体业务选择切换方案。

业务类型 切换策略
对其他三方应用提供服务 需根据业务场景匹配到系统对应的场景化 ExtensionAbility 。
应用内:前台运行时公共使用 可以将该组件代码抽取成公共模块供其他组件使用。
应用内:进入后台时继续运行 可以将此服务切换为 后台任务 。

DataAbility切换

FA模型中的DataAbility对应Stage模型中的DataShareExtensionAbility。

与ServiceExtensionAbility类似,Stage模型下的DataShareExtensionAbility为系统API,只有系统应用才可以创建。因此,FA模型的DataAbility的切换,对于系统应用和三方应用策略有所不同。下面分别介绍这两种场景。

系统应用DataAbility切换至DataShareExtensionAbility

迁移步骤和PageAbility基本一致。

  1. 在Stage应用中创建DataShareExtensionAbility。

  2. 将FA应用中DataAbility的业务代码迁移到新创建的DataShareExtensionAbility中。 DataAbility和DataShareExtensionAbility生命周期对比见下表。

    FA的DataAbility Stage的DataShareExtensionAbility 对比描述
    onInitialized?(info: AbilityInfo): void onCreate?(want: Want, callback:
    AsyncCallback): void 两者调用时机一致,函数名即入参都不一样,Stage模型下增加了入参want以便开发者在创建时获取参数。
    update?(uri: string, valueBucket: rdb.ValuesBucket, predicates: dataAbility.DataAbilityPredicates, callback: AsyncCallback): void update?(uri: string, predicates: dataSharePredicates.DataSharePredicates, value: ValuesBucket, callback: AsyncCallback): void 两者意义和调用时机一致,参数顺序和参数类型略有不同,需要简单改造。
    query?(uri: string, columns: Array, predicates: dataAbility.DataAbilityPredicates, callback: AsyncCallback): void query?(uri: string, predicates: dataSharePredicates.DataSharePredicates, columns: Array, callback: AsyncCallback): void; 两者意义和调用时机一致,参数顺序和参数类型略有不同,需要简单改造。
    delete?(uri: string, predicates: dataAbility.DataAbilityPredicates, callback: AsyncCallback): void delete?(uri: string, predicates: dataSharePredicates.DataSharePredicates, callback: AsyncCallback): 两者意义和调用时机一致,参数类型略有不同,需要简单改造。
    normalizeUri?(uri: string, callback: AsyncCallback): void normalizeUri?(uri: string, callback: AsyncCallback): void 两者意义和调用时机一致,参数也一致。
    batchInsert?(uri: string, valueBuckets: Array<rdb.ValuesBucket>, callback: AsyncCallback): void batchInsert?(uri: string, values: Array, callback: AsyncCallback): void 两者意义和调用时机一致,参数类型略有不同,需要简单改造。
    denormalizeUri?(uri: string, callback: AsyncCallback): void denormalizeUri?(uri: string, callback: AsyncCallback): void 两者意义和调用时机一致,参数也一致。
    insert?(uri: string, valueBucket: rdb.ValuesBucket, callback: AsyncCallback): void insert?(uri: string, value: ValuesBucket, callback: AsyncCallback): void 两者意义和调用时机一致,参数类型略有不同,需要简单改造。
    openFile?(uri: string, mode: string, callback: AsyncCallback): void NA Stage模型不支持uri跨进程访问,建议通过want携带FD和文件信息进行跨进程文件访问。
    getFileTypes?(uri: string, mimeTypeFilter: string, callback: AsyncCallback<Array>): void NA Stage模型不支持uri跨进程访问,建议通过want携带FD和文件信息进行跨进程文件访问。
    getType?(uri: string, callback: AsyncCallback): void NA Stage模型不支持uri跨进程访问,建议通过want携带FD和文件信息进行跨进程文件访问。
    executeBatch?(ops: Array, callback: AsyncCallback<Array>): void NA DataShareExtensonAbility不提供该接口,开发者需根据业务功能重新实现。
    call?(method: string, arg: string, extras: PacMap, callback: AsyncCallback): void NA DataShareExtensonAbility不提供该接口,开发者需根据业务功能重新实现。

三方应用DataAbility改造为公共模块

Stage模型三方应用不能对其他三方提供数据,应用需要根据具体业务选择切换方案。

DataAbility业务类型 切换DataShareExtension策略
对三方提供数据 需根据业务场景匹配到系统对应的场景化 ExtensionAbility。
应用内使用的数据 对应用内其他组件提供数据,建议提取公共模块。

为了能让大家更好的学习鸿蒙(HarmonyOS NEXT)开发技术,这边特意整理了《鸿蒙开发学习手册》(共计890页),希望对大家有所帮助:https://qr21.cn/FV7h05

《鸿蒙开发学习手册》:

如何快速入门:https://qr21.cn/FV7h05

  1. 基本概念
  2. 构建第一个ArkTS应用
  3. ……

开发基础知识:https://qr21.cn/FV7h05

  1. 应用基础知识
  2. 配置文件
  3. 应用数据管理
  4. 应用安全管理
  5. 应用隐私保护
  6. 三方应用调用管控机制
  7. 资源分类与访问
  8. 学习ArkTS语言
  9. ……

基于ArkTS 开发:https://qr21.cn/FV7h05

  1. Ability开发
  2. UI开发
  3. 公共事件与通知
  4. 窗口管理
  5. 媒体
  6. 安全
  7. 网络与链接
  8. 电话服务
  9. 数据管理
  10. 后台任务(Background Task)管理
  11. 设备管理
  12. 设备使用信息统计
  13. DFX
  14. 国际化开发
  15. 折叠屏系列
  16. ……

鸿蒙开发面试真题(含参考答案):https://qr18.cn/F781PH

鸿蒙开发面试大盘集篇(共计319页):https://qr18.cn/F781PH

1.项目开发必备面试题
2.性能优化方向
3.架构方向
4.鸿蒙开发系统底层方向
5.鸿蒙音视频开发方向
6.鸿蒙车载开发方向
7.鸿蒙南向开发方向

Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐