描述清楚仔细看
描述清楚仔细看
  • 发布:2025-12-24 13:49
  • 更新:2025-12-24 15:03
  • 阅读:35

uniappx鸿蒙端如何设置多个UIAbility以实现同时开启多个长时任务

分类:uni-app x

https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/continuous-task

华为官网文档里有说明,

对于API version 20及之前版本,一个UIAbility(FA模型则为ServiceAbility)同一时刻仅支持申请一个长时任务,即在一个长时任务结束后才能继续申请。如果一个应用同时需要申请多个长时任务,需要创建多个UIAbility。

但是,我在uniappx项目里的module.json5只看到一个EntryAbility

 "abilities": [  
      {  
        "name": "EntryAbility",  
        "orientation": "portrait",  
        "srcEntry": "./ets/entryability/```javascript  
EntryAbility.ets",  
        "description": "$string:EntryAbility_desc",  
        "icon": "$media:layered_image",  
        "label": "$string:EntryAbility_label",  
        "startWindowIcon": "$media:startIcon",  
        "startWindowBackground": "$color:start_window_background",  
        "exported": true,  
        "skills": [  
          {  
            "entities": [  
              "entity.system.home"  
            ],  
            "actions": [  
              "action.system.home"  
            ]  
          }  
        ],  
        "backgroundModes": ["audioRecording","audioPlayback"]  
      }  
    ],
多个长时任务的必要性

在鸿蒙里,需要后台运行的,必须得申请长时任务。

假设我的app里有后台播放音频功能,那么就占了一个长时任务,则无法再同时开启其他需要长时任务的业务了,如录音、定位导航、蓝牙数据处理等

2025-12-24 13:49 负责人:无 分享
已邀请:
Ask小助手

Ask小助手

该问题请在专业群( uni-app x技术交流群 ) 咨询

在uni-app x鸿蒙端实现多个长时任务,需创建多个UIAbility。根据华为文档,单个UIAbility仅支持一个长时任务,需通过以下步骤配置:

  1. 修改module.json5:在abilities数组中添加新的UIAbility配置,例如:

    {  
    "name": "AudioAbility",  
    "srcEntry": "./ets/audioability/AudioAbility.ets",  
    "backgroundModes": ["audioPlayback"]  
    },  
    {  
    "name": "LocationAbility",  
    "srcEntry": "./ets/locationability/LocationAbility.ets",  
    "backgroundModes": ["location"]  
    }
  2. 创建ETS文件:在entry/src/main/ets/目录下新建对应文件夹(如audioability),并创建Ability文件,实现onCreate()中申请长时任务:

    
    import ability from '@ohos.app.ability.UIAbility';  
    import window from '@ohos.window';  

export default class AudioAbility extends ability.UIAbility {
onCreate(want, launchParam) {
// 申请音频后台任务
this.requestBackgroundRunning({
taskType: 'audio'
});
}
}



3. **注意事项**:  
   - 需HBuilderX 4.61+版本(参考[UTSHarmony兼容性](https://doc.dcloud.net.cn/uni-app-x/uts/utsharmony.html))  
   - 每个Ability需在`backgroundModes`中声明对应任务类型  
   - 通过[uni-app x原生SDK文档](https://doc.dcloud.net.cn/uni-app-x/native/use/harmonyapi.html)了解详细API  

此方案符合鸿蒙规范,可同时管理多个后台任务(如音频播放+定位)。
内容为 AI 生成,仅供参考
DCloud_UNI_OttoJi

DCloud_UNI_OttoJi - 日常回复 uni-app/x 问题,如果艾特我没看到,请主动私信

这个不属于 uniapp 的问题,两个角度思考,你可使用离线打包,自己来掌控原生鸿蒙工程如何处理,可以不考虑 api21 以下的用户,他们的用户占比,可以在这里查看 https://developer.huawei.com/consumer/cn/doc/harmonyos-releases/sdk-version-percentage

api21 已经是 80% 的用户比例了

要回复问题请先登录注册