文章目录背景一、BackgroundTaskMode 枚举概述二、10 种模式全解析模式 1DATA_TRANSFER — 数据传输模式 2AUDIO_PLAYBACK — 音视频播放模式 3AUDIO_RECORDING — 录音录屏模式 4LOCATION — 定位导航模式 5BLUETOOTH_INTERACTION — 蓝牙业务模式 6MULTI_DEVICE_CONNECTION — 多设备互联模式 7VOIP — 音视频通话模式 8TASK_KEEPING — 计算任务模式 9AV_PLAYBACK_AND_RECORD — 多媒体业务模式 10SPECIAL_SCENARIO_PROCESSING — 特殊场景三、模式对照速查表四、模式转换的内部实现五、Demo 中的模式选择 UI六、多模式组合申请七、常见选型错误八、小结背景近期发现一款很有意思的HarmonyOS 三方库, 地址 pura/harmony-utils(V1.4.0) , 作者是桃花镇童长老, 我这里也是直接通过该作者公布的源码进行案例编写进行,写了到目前写了一部分demo ,感觉确实很有帮助,这里呢也是开始写一个系列的演示demo 供大家参考。如有帮助可以在OpenHarmony中进行下载安装进行使用哦案例demo导航展示↓↓↓↓↓↓接下来言归正传 ↓↓↓↓一、BackgroundTaskMode 枚举概述HarmonyOS 将后台长时任务划分为10 种模式每种模式对应不同的业务场景。系统会校验申请的模式是否与实际业务匹配不匹配会导致申请失败。因此正确选择BackgroundTaskMode是使用长时任务的首要前提。二、10 种模式全解析模式 1DATA_TRANSFER — 数据传输backgroundTaskManager.BackgroundTaskMode.MODE_DATA_TRANSFER// 内部字符串dataTransfer适用场景后台下载大文件视频、安装包、文档后台上传本地文件到云端后台数据同步通讯录、相册备份特点最常见的后台任务模式只要涉及大量数据的上传/下载优先选择此模式。模式 2AUDIO_PLAYBACK — 音视频播放backgroundTaskManager.BackgroundTaskMode.MODE_AUDIO_PLAYBACK// 内部字符串audioPlayback适用场景音乐播放器后台播放播客/有声书应用视频流媒体的音频部分特点选择此模式后系统允许 App 持续占用音频焦点通知栏通常会显示播放控制。模式 3AUDIO_RECORDING — 录音录屏backgroundTaskManager.BackgroundTaskMode.MODE_AUDIO_RECORDING// 内部字符串audioRecording适用场景后台录音会议记录、语音笔记屏幕录制特点涉及麦克风或屏幕录制选此模式。注意持续录制会消耗较多资源和电量。模式 4LOCATION — 定位导航backgroundTaskManager.BackgroundTaskMode.MODE_LOCATION// 内部字符串location适用场景地图导航 App后台持续更新位置运动轨迹记录跑步、骑行打车/快递跟踪特点需要持续获取 GPS/网络位置是导航类 App 的标配模式。模式 5BLUETOOTH_INTERACTION — 蓝牙业务backgroundTaskManager.BackgroundTaskMode.MODE_BLUETOOTH_INTERACTION// 内部字符串bluetoothInteraction适用场景蓝牙耳机/音箱的连接维持蓝牙健康设备数据同步手环、血压计BLE 低功耗设备后台通信特点凡涉及蓝牙的持续交互均应选择此模式。模式 6MULTI_DEVICE_CONNECTION — 多设备互联backgroundTaskManager.BackgroundTaskMode.MODE_MULTI_DEVICE_CONNECTION// 内部字符串multiDeviceConnection适用场景华为设备之间的跨设备协同手机与平板的流转分布式数据同步多设备发现与连接管理特点HarmonyOS 的核心能力之一分布式场景专用。模式 7VOIP — 音视频通话backgroundTaskManager.BackgroundTaskMode.MODE_VOIP// 内部字符串voip适用场景微信/企业微信视频通话第三方 VoIP 应用WhatsApp、Zoom直播连麦特点通话进行时应用切到后台仍需保持连接必须使用此模式。模式 8TASK_KEEPING — 计算任务backgroundTaskManager.BackgroundTaskMode.MODE_TASK_KEEPING// 内部字符串taskKeeping适用场景后台持续计算AI 推理、图像处理后台运行脚本或算法演示/测试场景最容易申请通过特点这是最通用的模式适合不属于以上专项场景但确实需要后台运行的计算密集型任务。BgTaskDemoPage 中默认选中此模式正是出于此原因。模式 9AV_PLAYBACK_AND_RECORD — 多媒体业务backgroundTaskManager.BackgroundTaskMode.MODE_AV_PLAYBACK_AND_RECORD// 内部字符串avPlaybackAndRecord适用场景同时进行音视频播放和录制直播推流边推流边监听回放视频通话录制特点相当于AUDIO_PLAYBACK和AUDIO_RECORDING的组合场景。模式 10SPECIAL_SCENARIO_PROCESSING — 特殊场景backgroundTaskManager.BackgroundTaskMode.MODE_SPECIAL_SCENARIO_PROCESSING// 内部字符串specialScenarioProcessing适用场景特殊行业应用金融、医疗等需要持续后台处理其他不属于以上类别的特殊场景特点作为兜底模式审核门槛较高需提供充分的业务说明。三、模式对照速查表枚举值内部字符串典型场景MODE_DATA_TRANSFERdataTransfer下载/上传文件MODE_AUDIO_PLAYBACKaudioPlayback后台音乐播放MODE_AUDIO_RECORDINGaudioRecording录音/录屏MODE_LOCATIONlocation导航/轨迹记录MODE_BLUETOOTH_INTERACTIONbluetoothInteraction蓝牙设备通信MODE_MULTI_DEVICE_CONNECTIONmultiDeviceConnection多设备协同MODE_VOIPvoipVoIP 通话MODE_TASK_KEEPINGtaskKeeping计算任务/通用后台MODE_AV_PLAYBACK_AND_RECORDavPlaybackAndRecord直播/录制播放MODE_SPECIAL_SCENARIO_PROCESSINGspecialScenarioProcessing特殊行业场景四、模式转换的内部实现BgTaskUtil内部通过convertTaskMode方法将枚举值转为字符串privatestaticconvertTaskMode(backgroundTaskMode:backgroundTaskManager.BackgroundTaskMode):string{if(backgroundTaskModebackgroundTaskManager.BackgroundTaskMode.MODE_DATA_TRANSFER){returndataTransfer;//数据传输。}elseif(backgroundTaskModebackgroundTaskManager.BackgroundTaskMode.MODE_AUDIO_PLAYBACK){returnaudioPlayback;//音视频播放。}elseif(backgroundTaskModebackgroundTaskManager.BackgroundTaskMode.MODE_AUDIO_RECORDING){returnaudioRecording;//录音、录屏。}elseif(backgroundTaskModebackgroundTaskManager.BackgroundTaskMode.MODE_LOCATION){returnlocation;//定位导航。}elseif(backgroundTaskModebackgroundTaskManager.BackgroundTaskMode.MODE_BLUETOOTH_INTERACTION){returnbluetoothInteraction;//蓝牙相关业务。}elseif(backgroundTaskModebackgroundTaskManager.BackgroundTaskMode.MODE_MULTI_DEVICE_CONNECTION){returnmultiDeviceConnection;//多设备互联。}elseif(backgroundTaskModebackgroundTaskManager.BackgroundTaskMode.MODE_VOIP){returnvoip;//音视频通话。}elseif(backgroundTaskModebackgroundTaskManager.BackgroundTaskMode.MODE_TASK_KEEPING){returntaskKeeping;//计算任务。}elseif(backgroundTaskModebackgroundTaskManager.BackgroundTaskMode.MODE_AV_PLAYBACK_AND_RECORD){returnavPlaybackAndRecord;//多媒体相关业务。}elseif(backgroundTaskModebackgroundTaskManager.BackgroundTaskMode.MODE_SPECIAL_SCENARIO_PROCESSING){returnspecialScenarioProcessing;//特殊场景类型}else{return;}}这就是为什么开发者只需传入枚举值不需要记住背后的字符串值。五、Demo 中的模式选择 UIDemo 页面通过复选网格展示所有 10 种模式用户可以多选Statemodes:BgModeItem[][{label: 数据传输,mode:backgroundTaskManager.BackgroundTaskMode.MODE_DATA_TRANSFER,desc:下载/上传,selected:false},{label: 音视频播放,mode:backgroundTaskManager.BackgroundTaskMode.MODE_AUDIO_PLAYBACK,desc:后台音乐,selected:false},{label:️ 录音录屏,mode:backgroundTaskManager.BackgroundTaskMode.MODE_AUDIO_RECORDING,desc:后台录制,selected:false},{label: 定位导航,mode:backgroundTaskManager.BackgroundTaskMode.MODE_LOCATION,desc:导航定位,selected:false},{label: 蓝牙业务,mode:backgroundTaskManager.BackgroundTaskMode.MODE_BLUETOOTH_INTERACTION,desc:蓝牙数据传输,selected:false},{label: 多设备互联,mode:backgroundTaskManager.BackgroundTaskMode.MODE_MULTI_DEVICE_CONNECTION,desc:设备发现/连接,selected:false},{label: 音视频通话,mode:backgroundTaskManager.BackgroundTaskMode.MODE_VOIP,desc:VoIP通话,selected:false},{label:⚙️ 计算任务,mode:backgroundTaskManager.BackgroundTaskMode.MODE_TASK_KEEPING,desc:后台计算,selected:true},{label: 多媒体业务,mode:backgroundTaskManager.BackgroundTaskMode.MODE_AV_PLAYBACK_AND_RECORD,desc:音视频处理,selected:false},{label:⚡ 特殊场景,mode:backgroundTaskManager.BackgroundTaskMode.MODE_SPECIAL_SCENARIO_PROCESSING,desc:特殊场景,selected:false},];UI 渲染部分Flex({wrap:FlexWrap.Wrap}){ForEach(this.modes,(item:BgModeItem){Column(){Text(item.label).fontSize(12).fontColor(item.selected?#FFF:#555).fontWeight(FontWeight.Medium)Text(item.desc).fontSize(10).fontColor(item.selected?rgba(255,255,255,0.7):#AAA).margin({top:2})}.width(47%).padding({top:10,bottom:10}).backgroundColor(item.selected?#4080FF:#F5F6FA).borderRadius(8).border({width:1,color:item.selected?#4080FF:#E0E0E0}).margin({right:6,bottom:6}).onClick((){item.selected!item.selected;this.modes[...this.modes];this.updateCanStart();})},(item:BgModeItem)item.label)}点击模式卡片背景色在蓝色已选和灰色未选之间切换选中至少一种模式后启动按钮才可用。六、多模式组合申请一次startBackgroundRunning调用可以传入多个模式constrequest:TaskRequest{backgroundTaskModes:[backgroundTaskManager.BackgroundTaskMode.MODE_AUDIO_PLAYBACK,backgroundTaskManager.BackgroundTaskMode.MODE_DATA_TRANSFER,],combinedTaskNotification:false,};constnotificationawaitBgTaskUtil.startBackgroundRunning(request);这相当于同时申请音视频播放和数据传输两种后台权限适合音乐播放 App 同时需要下载歌曲的场景。七、常见选型错误错误做法正确做法导航 App 选TASK_KEEPING应选LOCATION音乐播放选TASK_KEEPING应选AUDIO_PLAYBACK视频通话选DATA_TRANSFER应选VOIP随意选多个模式凑数仅选与实际业务匹配的模式系统的校验很严格如果你的 App 没有相关硬件能力如没有定位权限却申请LOCATION模式申请会被拒绝。八、小结选择BackgroundTaskMode的核心原则是**“业务是什么就选什么”**下载/上传 →DATA_TRANSFER播放音乐 →AUDIO_PLAYBACK录音 →AUDIO_RECORDING导航定位 →LOCATION蓝牙通信 →BLUETOOTH_INTERACTION多设备协同 →MULTI_DEVICE_CONNECTIONVoIP 通话 →VOIP计算/通用 →TASK_KEEPING直播推流 →AV_PLAYBACK_AND_RECORD特殊行业 →SPECIAL_SCENARIO_PROCESSING选对模式后台任务才能顺利申请并通过审核。
HarmonyOS BgTaskUtil 后台任务模式详解:10 种 BackgroundTaskMode 全解析
文章目录背景一、BackgroundTaskMode 枚举概述二、10 种模式全解析模式 1DATA_TRANSFER — 数据传输模式 2AUDIO_PLAYBACK — 音视频播放模式 3AUDIO_RECORDING — 录音录屏模式 4LOCATION — 定位导航模式 5BLUETOOTH_INTERACTION — 蓝牙业务模式 6MULTI_DEVICE_CONNECTION — 多设备互联模式 7VOIP — 音视频通话模式 8TASK_KEEPING — 计算任务模式 9AV_PLAYBACK_AND_RECORD — 多媒体业务模式 10SPECIAL_SCENARIO_PROCESSING — 特殊场景三、模式对照速查表四、模式转换的内部实现五、Demo 中的模式选择 UI六、多模式组合申请七、常见选型错误八、小结背景近期发现一款很有意思的HarmonyOS 三方库, 地址 pura/harmony-utils(V1.4.0) , 作者是桃花镇童长老, 我这里也是直接通过该作者公布的源码进行案例编写进行,写了到目前写了一部分demo ,感觉确实很有帮助,这里呢也是开始写一个系列的演示demo 供大家参考。如有帮助可以在OpenHarmony中进行下载安装进行使用哦案例demo导航展示↓↓↓↓↓↓接下来言归正传 ↓↓↓↓一、BackgroundTaskMode 枚举概述HarmonyOS 将后台长时任务划分为10 种模式每种模式对应不同的业务场景。系统会校验申请的模式是否与实际业务匹配不匹配会导致申请失败。因此正确选择BackgroundTaskMode是使用长时任务的首要前提。二、10 种模式全解析模式 1DATA_TRANSFER — 数据传输backgroundTaskManager.BackgroundTaskMode.MODE_DATA_TRANSFER// 内部字符串dataTransfer适用场景后台下载大文件视频、安装包、文档后台上传本地文件到云端后台数据同步通讯录、相册备份特点最常见的后台任务模式只要涉及大量数据的上传/下载优先选择此模式。模式 2AUDIO_PLAYBACK — 音视频播放backgroundTaskManager.BackgroundTaskMode.MODE_AUDIO_PLAYBACK// 内部字符串audioPlayback适用场景音乐播放器后台播放播客/有声书应用视频流媒体的音频部分特点选择此模式后系统允许 App 持续占用音频焦点通知栏通常会显示播放控制。模式 3AUDIO_RECORDING — 录音录屏backgroundTaskManager.BackgroundTaskMode.MODE_AUDIO_RECORDING// 内部字符串audioRecording适用场景后台录音会议记录、语音笔记屏幕录制特点涉及麦克风或屏幕录制选此模式。注意持续录制会消耗较多资源和电量。模式 4LOCATION — 定位导航backgroundTaskManager.BackgroundTaskMode.MODE_LOCATION// 内部字符串location适用场景地图导航 App后台持续更新位置运动轨迹记录跑步、骑行打车/快递跟踪特点需要持续获取 GPS/网络位置是导航类 App 的标配模式。模式 5BLUETOOTH_INTERACTION — 蓝牙业务backgroundTaskManager.BackgroundTaskMode.MODE_BLUETOOTH_INTERACTION// 内部字符串bluetoothInteraction适用场景蓝牙耳机/音箱的连接维持蓝牙健康设备数据同步手环、血压计BLE 低功耗设备后台通信特点凡涉及蓝牙的持续交互均应选择此模式。模式 6MULTI_DEVICE_CONNECTION — 多设备互联backgroundTaskManager.BackgroundTaskMode.MODE_MULTI_DEVICE_CONNECTION// 内部字符串multiDeviceConnection适用场景华为设备之间的跨设备协同手机与平板的流转分布式数据同步多设备发现与连接管理特点HarmonyOS 的核心能力之一分布式场景专用。模式 7VOIP — 音视频通话backgroundTaskManager.BackgroundTaskMode.MODE_VOIP// 内部字符串voip适用场景微信/企业微信视频通话第三方 VoIP 应用WhatsApp、Zoom直播连麦特点通话进行时应用切到后台仍需保持连接必须使用此模式。模式 8TASK_KEEPING — 计算任务backgroundTaskManager.BackgroundTaskMode.MODE_TASK_KEEPING// 内部字符串taskKeeping适用场景后台持续计算AI 推理、图像处理后台运行脚本或算法演示/测试场景最容易申请通过特点这是最通用的模式适合不属于以上专项场景但确实需要后台运行的计算密集型任务。BgTaskDemoPage 中默认选中此模式正是出于此原因。模式 9AV_PLAYBACK_AND_RECORD — 多媒体业务backgroundTaskManager.BackgroundTaskMode.MODE_AV_PLAYBACK_AND_RECORD// 内部字符串avPlaybackAndRecord适用场景同时进行音视频播放和录制直播推流边推流边监听回放视频通话录制特点相当于AUDIO_PLAYBACK和AUDIO_RECORDING的组合场景。模式 10SPECIAL_SCENARIO_PROCESSING — 特殊场景backgroundTaskManager.BackgroundTaskMode.MODE_SPECIAL_SCENARIO_PROCESSING// 内部字符串specialScenarioProcessing适用场景特殊行业应用金融、医疗等需要持续后台处理其他不属于以上类别的特殊场景特点作为兜底模式审核门槛较高需提供充分的业务说明。三、模式对照速查表枚举值内部字符串典型场景MODE_DATA_TRANSFERdataTransfer下载/上传文件MODE_AUDIO_PLAYBACKaudioPlayback后台音乐播放MODE_AUDIO_RECORDINGaudioRecording录音/录屏MODE_LOCATIONlocation导航/轨迹记录MODE_BLUETOOTH_INTERACTIONbluetoothInteraction蓝牙设备通信MODE_MULTI_DEVICE_CONNECTIONmultiDeviceConnection多设备协同MODE_VOIPvoipVoIP 通话MODE_TASK_KEEPINGtaskKeeping计算任务/通用后台MODE_AV_PLAYBACK_AND_RECORDavPlaybackAndRecord直播/录制播放MODE_SPECIAL_SCENARIO_PROCESSINGspecialScenarioProcessing特殊行业场景四、模式转换的内部实现BgTaskUtil内部通过convertTaskMode方法将枚举值转为字符串privatestaticconvertTaskMode(backgroundTaskMode:backgroundTaskManager.BackgroundTaskMode):string{if(backgroundTaskModebackgroundTaskManager.BackgroundTaskMode.MODE_DATA_TRANSFER){returndataTransfer;//数据传输。}elseif(backgroundTaskModebackgroundTaskManager.BackgroundTaskMode.MODE_AUDIO_PLAYBACK){returnaudioPlayback;//音视频播放。}elseif(backgroundTaskModebackgroundTaskManager.BackgroundTaskMode.MODE_AUDIO_RECORDING){returnaudioRecording;//录音、录屏。}elseif(backgroundTaskModebackgroundTaskManager.BackgroundTaskMode.MODE_LOCATION){returnlocation;//定位导航。}elseif(backgroundTaskModebackgroundTaskManager.BackgroundTaskMode.MODE_BLUETOOTH_INTERACTION){returnbluetoothInteraction;//蓝牙相关业务。}elseif(backgroundTaskModebackgroundTaskManager.BackgroundTaskMode.MODE_MULTI_DEVICE_CONNECTION){returnmultiDeviceConnection;//多设备互联。}elseif(backgroundTaskModebackgroundTaskManager.BackgroundTaskMode.MODE_VOIP){returnvoip;//音视频通话。}elseif(backgroundTaskModebackgroundTaskManager.BackgroundTaskMode.MODE_TASK_KEEPING){returntaskKeeping;//计算任务。}elseif(backgroundTaskModebackgroundTaskManager.BackgroundTaskMode.MODE_AV_PLAYBACK_AND_RECORD){returnavPlaybackAndRecord;//多媒体相关业务。}elseif(backgroundTaskModebackgroundTaskManager.BackgroundTaskMode.MODE_SPECIAL_SCENARIO_PROCESSING){returnspecialScenarioProcessing;//特殊场景类型}else{return;}}这就是为什么开发者只需传入枚举值不需要记住背后的字符串值。五、Demo 中的模式选择 UIDemo 页面通过复选网格展示所有 10 种模式用户可以多选Statemodes:BgModeItem[][{label: 数据传输,mode:backgroundTaskManager.BackgroundTaskMode.MODE_DATA_TRANSFER,desc:下载/上传,selected:false},{label: 音视频播放,mode:backgroundTaskManager.BackgroundTaskMode.MODE_AUDIO_PLAYBACK,desc:后台音乐,selected:false},{label:️ 录音录屏,mode:backgroundTaskManager.BackgroundTaskMode.MODE_AUDIO_RECORDING,desc:后台录制,selected:false},{label: 定位导航,mode:backgroundTaskManager.BackgroundTaskMode.MODE_LOCATION,desc:导航定位,selected:false},{label: 蓝牙业务,mode:backgroundTaskManager.BackgroundTaskMode.MODE_BLUETOOTH_INTERACTION,desc:蓝牙数据传输,selected:false},{label: 多设备互联,mode:backgroundTaskManager.BackgroundTaskMode.MODE_MULTI_DEVICE_CONNECTION,desc:设备发现/连接,selected:false},{label: 音视频通话,mode:backgroundTaskManager.BackgroundTaskMode.MODE_VOIP,desc:VoIP通话,selected:false},{label:⚙️ 计算任务,mode:backgroundTaskManager.BackgroundTaskMode.MODE_TASK_KEEPING,desc:后台计算,selected:true},{label: 多媒体业务,mode:backgroundTaskManager.BackgroundTaskMode.MODE_AV_PLAYBACK_AND_RECORD,desc:音视频处理,selected:false},{label:⚡ 特殊场景,mode:backgroundTaskManager.BackgroundTaskMode.MODE_SPECIAL_SCENARIO_PROCESSING,desc:特殊场景,selected:false},];UI 渲染部分Flex({wrap:FlexWrap.Wrap}){ForEach(this.modes,(item:BgModeItem){Column(){Text(item.label).fontSize(12).fontColor(item.selected?#FFF:#555).fontWeight(FontWeight.Medium)Text(item.desc).fontSize(10).fontColor(item.selected?rgba(255,255,255,0.7):#AAA).margin({top:2})}.width(47%).padding({top:10,bottom:10}).backgroundColor(item.selected?#4080FF:#F5F6FA).borderRadius(8).border({width:1,color:item.selected?#4080FF:#E0E0E0}).margin({right:6,bottom:6}).onClick((){item.selected!item.selected;this.modes[...this.modes];this.updateCanStart();})},(item:BgModeItem)item.label)}点击模式卡片背景色在蓝色已选和灰色未选之间切换选中至少一种模式后启动按钮才可用。六、多模式组合申请一次startBackgroundRunning调用可以传入多个模式constrequest:TaskRequest{backgroundTaskModes:[backgroundTaskManager.BackgroundTaskMode.MODE_AUDIO_PLAYBACK,backgroundTaskManager.BackgroundTaskMode.MODE_DATA_TRANSFER,],combinedTaskNotification:false,};constnotificationawaitBgTaskUtil.startBackgroundRunning(request);这相当于同时申请音视频播放和数据传输两种后台权限适合音乐播放 App 同时需要下载歌曲的场景。七、常见选型错误错误做法正确做法导航 App 选TASK_KEEPING应选LOCATION音乐播放选TASK_KEEPING应选AUDIO_PLAYBACK视频通话选DATA_TRANSFER应选VOIP随意选多个模式凑数仅选与实际业务匹配的模式系统的校验很严格如果你的 App 没有相关硬件能力如没有定位权限却申请LOCATION模式申请会被拒绝。八、小结选择BackgroundTaskMode的核心原则是**“业务是什么就选什么”**下载/上传 →DATA_TRANSFER播放音乐 →AUDIO_PLAYBACK录音 →AUDIO_RECORDING导航定位 →LOCATION蓝牙通信 →BLUETOOTH_INTERACTION多设备协同 →MULTI_DEVICE_CONNECTIONVoIP 通话 →VOIP计算/通用 →TASK_KEEPING直播推流 →AV_PLAYBACK_AND_RECORD特殊行业 →SPECIAL_SCENARIO_PROCESSING选对模式后台任务才能顺利申请并通过审核。