HarmonyOS鸿蒙Next Ability框架开发常见问题

HarmonyOS鸿蒙Next Ability框架开发常见问题

元能力子系统

FA和Stage模型中,应用是否可以创建并指定UIAbility运行在哪个进程

适用于:HarmonyOS 3.1 Beta API 9

解决措施

FA和Stage模型中,应用可以创建进程并指定UIAbility运行在某个进程。

FA模型

FA模型支持多进程,默认情况下,同一应用的所有组件均在相同进程中运行,且大多数应用都不应该改变这一点。但是如果应用自身业务需要某个组件独立进程运行,可在config配置文件中配置;配置清单中,ability标签的process子标签可指定该组件在哪个进程中运行,应用可以设置通过该属性使每个组件均在各自的进程中运行,但process子标签仅支持系统应用配置,三方应用配置不生效。

Stage模型

Stage模型支持多进程:Stage模型的进程模型由系统定义,三方应用不能配置多进程;如果需要自定义配置独立进程,需要申请特殊权限;配置清单中,module标签的process子标签可指定该Hap下Ability在哪个进程中运行,应用可以设置通过该属性使每个Hap的Ability组件均在各自的进程中运行。如果不配置,进程名默认为包名。

Stage模型与FA模型在进程内对象共享方面有哪些差异

适用于:HarmonyOS 3.1 Beta API 9

解决措施

Stage模型

Stage模型中,多个应用组件共享同一个ArkTS引擎实例,因此在Stage模型中,应用组件之间可以方便的共享对象和状态,同时减少复杂应用运行对内存的占用。

FA模型

FA模型中,每个应用组件独享一个ArkTS引擎实例。Stage模型作为主推的应用模型,开发者通过它能够更加便利地开发出分布式场景下的复杂应用。

参考链接

如何使用AbilityStage的生命周期函数

适用于:HarmonyOS 3.1 Beta API 9

解决措施

在module.json5里的module中加上srcEntry字段"srcEntry": "./ets/myabilitystage/MyAbilityStage.ts"

参考链接

多实例场景下当前Ability调用terminateSelf后,桌面最近任务列表如何设置不保留快照

适用于:HarmonyOS 3.1 Beta API 9

解决措施

可在module.json5配置文件中配置removeMissionAfterTerminate为true。

通过startAbility()方法无法启动UIAbility实例

适用于:HarmonyOS 3.1 Beta API 9

解决措施

如果是通过startAbility的方式拉起,检查want中abilityName字段是否携带了bundleName做前缀,如果有,请删除。

检查MainAbility.ts文件中onWindowStageCreate方法配置的Ability首页文件是否在main_pages.json中有定义,如果没有定义,请补齐。SDK和OpenHarmony SDK系统推荐同一天的版本。

调用方法的时候,方法内部的this变成了undefined

适用于:HarmonOS 3.1 Beta API 9

解决措施

方式一:在调用方法的时候加上.bind(this);

方式二:使用箭头函数。

启动UIAbility时报错:must have required property ‘startWindowIcon’

适用于:HarmonyOS 3.1 Beta API 9

解决措施

UIAbility配置中缺少startWindowIcon属性配置,需要在module.json5中abilities中配置startWindowIcon。

代码示例

{
  "module": {
    // do something
    "abilities": [{
      // do something
      "startWindowIcon": "$media:space",
      "startWindowBackground": "$color:white",
    }]
  }
}

Stage模型是否推荐使用globalThis获取Context

适用于:HarmonyOS 3.1 Beta API 9

不推荐,Stage模型使用globalThis去获取Context是错误的使用方式。

在Stage模型中,整个应用进程共用一个js虚拟机实例,其中可以运行多个Ability实例,共用一个global对象。在同一个js虚拟机内的不同的Ability中使用globalThis获取Context,存在被覆盖从而发生错误的风险。

部署HAP时上报安装内容过大错误

适用于:HarmonyOS 3.1 Beta API 9

问题现象

部署hap时,上报如下错误:

Failure[INSTALL_FAILED_SIZE_TOO_LARGE] error while deploying hap?

解决措施

将其拆分为多个HAP即可解决。

调用方使用startAbilityForResult时,被调用方如何返回数据

适用于:HarmonyOS 3.1 Beta API 9

解决措施

被调用方使用AbilityContext.terminateSelfWithResult方法,销毁被调用方ability,传递参数给startAbilityForResult回调函数。

如何设置卡片背景为透明

适用于:HarmonyOS 3.1 Beta API 9

问题现象

用JS开发服务卡片,卡片背景颜色能不能去掉?

解决措施

在卡片根目录widget新建widget/resources/styles/default.json文件,设置如下代码。

代码示例

{
  "style":
  {
    "app_background": "#00000000"
  }
}

参考链接

如何获取系统时间戳

适用于:Harmony 3.1 Beta API 9

解决措施

在HarmonyOS中使用接口@ohos.systemTime的getCurrentTime来获取系统系统时间和时区。

代码示例

使用接口@ohos.systemTime:

try {
  systemTime.getCurrentTime(true, (error, time) => {
    if (error) {
      console.info(`Failed to getting currentTime. message: ${error.message}, code: ${error.code}`);
      return;
    }
    console.info(`Succeeded in getting currentTime: ${time}`);
  });
} catch(e) {
  console.info(`Failed to get currentTime. message: ${e.message}, code: ${e.code}`);
}

参考链接

如何获取当前应用程序缓存目录

适用于:Harmony SDK 3.1 Beta API 9

解决措施

在HarmonyOS中使用Context.cacheDir获取应用程序的缓存目录。

服务卡片生命周期回调函数在哪个js文件中调用

适用于:Harmony SDK 3.1 Beta API 9

解决措施

新建卡片时会生成一个FormAblity.ts文件,其中包含卡片对应的生命周期。

如何获取应用级别的temp路径和files路径

适用于:HarmonOS 3.1 Beta

解决措施

通过应用上下文context获取。如:this.context.getApplicationContext.tempDir来获取temp路径;this.context.getApplicationContext.filesDir来获取files路径。

terminateSelf方法销毁当前应用之后并没有在后台任务列表中删除

适用于:HarmonOS 3.1 Beta

解决措施

在当前应用对应UIAbility的module.json5配置文件中,配置abilities标签的removeMissionAfterTerminate字段,设置为true即为销毁应用的同时删除应用快照记录,缺省值为false。

参考链接

旋转屏幕,如何防止界面生命周期重启

适用于:HarmonOS 3.1 Beta

解决措施

FA模型,为防止界面生命周期重启,可在config.json文件中添加configChanges属性为orientation。

原子化服务是否可以全程使用js实现

适用于:Harmony 3.1 Beta API 9

解决措施

目前新建的卡片的目录结构都是css+hml+json,不能完全靠js实现,事件的触发和参数的传递都可以在json文件里面处理。


更多关于HarmonyOS鸿蒙Next Ability框架开发常见问题的实战教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

“如果需要自定义配置独立进程,需要申请特殊权限”,请问特殊权限是如何申请?

更多关于HarmonyOS鸿蒙Next Ability框架开发常见问题的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next的Ability框架开发中,常见问题包括:

  1. 生命周期管理:开发者需准确理解Ability的生命周期方法(如onStartonActiveonInactive等),确保资源正确释放和状态管理。

  2. 页面跳转与数据传递:使用Intent进行页面跳转时,需注意数据传递的格式和大小限制,避免性能问题。

  3. 多线程处理:在UI线程中执行耗时操作会导致界面卡顿,建议使用TaskDispatcher进行异步任务处理。

  4. 权限管理:访问敏感数据或功能时,需在config.json中声明权限,并在运行时动态申请。

  5. 资源管理:合理使用系统资源,避免内存泄漏,特别是在onDestroy中释放资源。

  6. 兼容性问题:不同设备可能对Ability的支持存在差异,需进行充分测试以确保兼容性。

通过理解这些问题并遵循最佳实践,可以提升应用性能和用户体验。

回到顶部