鸿蒙后台任务:ServiceExtensionAbility 中短时任务和长时任务到底怎么选?

网罗开发(小红书、快手、视频号同名)

大家好,我是展菲,目前在上市企业从事人工智能项目研发管理工作,平时热衷于分享各种编程领域的软硬技能知识以及前沿技术,包括iOS、前端、Harmony OS、Java、Python等方向。在移动端开发、鸿蒙开发、物联网、嵌入式、云原生、开源等领域有深厚造诣。

图书作者:《ESP32-C3 物联网工程开发实战》
图书作者:《SwiftUI 入门,进阶与实战》
超级个体:COC上海社区主理人
特约讲师:大学讲师,谷歌亚马逊分享嘉宾
科技博主:华为HDE/HDG

我的博客内容涵盖广泛,主要分享技术教程、Bug解决方案、开发工具使用、前沿科技资讯、产品评测与使用体验。我特别关注云服务产品评测、AI 产品对比、开发板性能测试以及技术报告,同时也会提供产品优缺点分析、横向对比,并分享技术沙龙与行业大会的参会体验。我的目标是为读者提供有深度、有实用价值的技术洞察与分析。

展菲:您的前沿技术领航员
👋 大家好,我是展菲!
📱 全网搜索“展菲”,即可纵览我在各大平台的知识足迹。
📣 公众号“Swift社区”,每周定时推送干货满满的技术长文,从新兴框架的剖析到运维实战的复盘,助您技术进阶之路畅通无阻。
💬 微信端添加好友“fzhanfei”,与我直接交流,不管是项目瓶颈的求助,还是行业趋势的探讨,随时畅所欲言。
📅 最新动态:2025 年 3 月 17 日
快来加入技术社区,一起挖掘技术的无限潜能,携手迈向数字化新征程!


文章目录

    • 前言
    • 为什么鸿蒙要区分短时任务和长时任务?
    • 短时任务适合什么场景?
      • 短时任务的系统行为
    • 短时任务的 Manifest 配置方式
    • 短时任务 Demo:后台同步一次数据
      • 代码要点解释
    • 长时任务到底解决什么问题?
    • 长时任务的关键点是什么?
    • 长时任务的 Manifest 标准配置
      • restartPolicy 该怎么选?
    • 音乐播放应用是如何正确保活的?
      • 必须申请的权限
    • 音乐后台服务 Demo
      • 为什么一定要 setForeground?
    • 音乐类应用的真实工程细节
    • 导航类应用为什么更“严格”?
    • 导航 Continuous Task 配置
    • 导航后台服务 Demo
      • 导航省电的核心思路
    • 最容易踩的几个坑
      • 把短时任务当长时用
      • 长时任务忘记释放资源
      • 以为 restartPolicy 是免死金牌
    • 总结

前言

在鸿蒙应用里,只要一提到“后台”,大多数人都会下意识紧张:

  • 会不会被系统杀?
  • 为啥刚切到后台,服务就没了?
  • 音乐、导航这种 App,凭什么能一直活着?

如果你正在用ServiceExtensionAbility,那你绕不开两个概念:

短时任务(Transient Task)
长时任务(Continuous Task)

这两个不是“名字不同”,而是系统调度策略完全不一样。选错了,代码写得再优雅也没用。

这篇文章我就从工程实践的角度,把它们彻底拆清楚。

为什么鸿蒙要区分短时任务和长时任务?

先说一个现实问题。

系统最怕什么?
后台无限跑、耗电、占内存、用户完全没感知。

所以鸿蒙从设计上就不鼓励“后台偷偷干活”,而是把后台任务分成两类:

  • 干完就走的
  • 必须长期存在的

系统的态度很明确:

你要是短期工作,我给你窗口
你要是长期工作,你必须“亮身份”

这就是 Transient 和 Continuous 的根本差异。

短时任务适合什么场景?

短时任务只有一个核心特点:

事情做完就可以死

非常适合下面这些场景:

  • 启动后同步一次配置
  • 上报日志、埋点
  • 拉一批数据到本地
  • 简单的后台计算
  • 临时网络请求

这些任务有两个共性:

  1. 生命周期短
  2. 不需要用户持续感知

短时任务的系统行为

  • 系统给你一小段后台执行时间
  • 不需要前台通知
  • 不需要 FOREGROUND_SERVICE 权限
  • 任务结束后,Ability 会被自动回收

不用也不该想着保活

短时任务的 Manifest 配置方式

<serviceExtensionandroid:name=".SyncServiceAbility"><extension><transientTask/></extension></serviceExtension>

这段配置只做了一件事:

告诉系统:这是一次性后台任务

没有 restartPolicy,也没有前台服务。

短时任务 Demo:后台同步一次数据

publicclassSyncServiceAbilityextendsServiceExtensionAbility{@OverridepublicvoidonStart(Intentintent){super.onStart(intent);newThread(()->{try{// 模拟网络请求Thread.sleep(3000);System.out.println("后台数据同步完成");}catch(InterruptedExceptione){e.printStackTrace();}finally{// 主动结束,释放资源stopSelf();}}).start();}@OverridepublicvoidonStop(){super.onStop();System.out.println("SyncServiceAbility stopped");}}

代码要点解释

  • 不要在主线程里做耗时操作
  • 任务完成后主动 stopSelf
  • 不要试图“延长生命周期”

短时任务的正确姿势就是:快进快出。

长时任务到底解决什么问题?

长时任务解决的是另一类需求:

用户明确知道你在后台运行,而且就是希望你别停。

典型场景包括:

  • 音乐播放
  • 导航定位
  • 运动轨迹记录
  • 长时间下载
  • 后台语音通话

这些任务如果突然停了,用户体验直接崩盘。

所以系统的要求也更严格:

你可以活,但你要让用户知道你活着

长时任务的关键点是什么?

长时任务有三个“硬性条件”:

  1. Manifest 里明确声明 continuousTask
  2. 必须是前台服务
  3. 必须展示前台通知

缺一个,系统都会找机会干掉你。

长时任务的 Manifest 标准配置

<serviceExtensionandroid:name=".MusicServiceAbility"><extension><continuousTask><restartPolicy>restartOnUserExit</restartPolicy><foregroundService><notification>音乐正在后台播放</notification></foregroundService></continuousTask></extension></serviceExtension>

restartPolicy 该怎么选?

  • restartOnUserExit
    用户退出应用,但业务还在,比如音乐

  • restartOnLowMemory
    系统内存紧张时,尽量拉起,比如导航

注意:这不是“无限复活”,只是提高存活概率。

音乐播放应用是如何正确保活的?

音乐 App 是最标准的 Continuous Task 场景。

必须申请的权限

<uses-permissionname="ohos.permission.FOREGROUND_SERVICE"/><uses-permissionname="ohos.permission.INTERNET"/>

音乐后台服务 Demo

publicclassMusicServiceAbilityextendsServiceExtensionAbility{privateMediaPlayermediaPlayer;@OverridepublicvoidonStart(Intentintent){super.onStart(intent);// 1. 创建前台通知Notificationnotification=NotificationUtil.createMusicNotification(this);// 2. 切到前台服务setForeground(true,notification);// 3. 初始化播放器mediaPlayer=newMediaPlayer();mediaPlayer.setDataSource("https://example.com/music.mp3");mediaPlayer.prepareAsync();mediaPlayer.setOnPreparedListener(MediaPlayer::start);}@OverridepublicvoidonStop(){super.onStop();if(mediaPlayer!=null){mediaPlayer.stop();mediaPlayer.release();mediaPlayer=null;}}}

为什么一定要 setForeground?

如果你不切前台:

  • 系统认为你在“偷偷后台跑”
  • 内存一紧,第一批被杀
  • 用户毫无心理预期

前台通知本质上是:

我在干活,你看得见

音乐类应用的真实工程细节

在真实项目里,你还会做这些事:

  • 获取 AudioFocus,避免被其他 App 抢占
  • 锁屏控制播放 / 暂停
  • 耳机插拔监听
  • 异常中断自动恢复

但不管你做多少优化,前台服务是底线

导航类应用为什么更“严格”?

导航比音乐更容易被系统盯上:

  • 持续定位
  • GPS 功耗高
  • 数据频繁更新

所以导航类 App 一定要自觉降功耗

导航 Continuous Task 配置

<serviceExtensionandroid:name=".NavigationServiceAbility"><extension><continuousTask><restartPolicy>restartOnLowMemory</restartPolicy><foregroundService><notification>导航正在后台运行</notification></foregroundService></continuousTask></extension></serviceExtension>

导航后台服务 Demo

publicclassNavigationServiceAbilityextendsServiceExtensionAbility{privateLocationManagerlocationManager;@OverridepublicvoidonStart(Intentintent){super.onStart(intent);Notificationnotification=NotificationUtil.createNavigationNotification(this);setForeground(true,notification);locationManager=LocationManager.getInstance(this);locationManager.requestLocationUpdates(LocationRequest.create().setInterval(5000).setPriority(LocationRequest.PRIORITY_BALANCED_POWER));}@OverridepublicvoidonStop(){super.onStop();if(locationManager!=null){locationManager.removeUpdates();}}}

导航省电的核心思路

  • 非必要不高精度
  • 后台拉长定位间隔
  • 页面不可见时减少刷新
  • 退出导航立刻释放资源

系统杀你,往往不是“恶意”,而是你太耗了。

最容易踩的几个坑

把短时任务当长时用

  • 同步任务写成 continuous
  • 却没前台通知
  • 结果更容易被杀

长时任务忘记释放资源

  • MediaPlayer 没 release
  • 定位监听没 remove
  • 内存越跑越大

以为 restartPolicy 是免死金牌

不是。

它只是让你有机会重启,不是“无限复活”。

总结

  • 只干一件事,干完就走 → Transient Task
  • 用户明确需要你一直在 → Continuous Task

音乐、导航这类应用,不要侥幸,不要抄捷径

  • 前台服务
  • 清晰通知
  • 合理功耗
  • 主动释放

系统不是不让你活,而是希望你活得有分寸

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1150297.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

小白学C指针 *

1. & 取地址符 - “在哪里&#xff1f;” int a 10; // a 是个变量&#xff0c;值是 10 &a // 这是 a 的地址&#xff08;门牌号&#xff09;&#xff0c;比如 0x7ffeeb0b1234比喻&#xff1a; a 你家的电视机&#xff08;值&#xff09;&a …

计算机深度学习毕设实战-基于python-CNN卷积神经网络对海洋壳类生物识别

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

2024年AI原生应用在事实核查领域的最新研究进展

当AI成为“真相侦探”&#xff1a;2024年AI原生事实核查的进化与突破 关键词 AI原生应用、事实核查、大语言模型(LLM)、多模态推理、实时核查、可信AI、知识图谱 摘要 在虚假信息像“数字病毒”一样蔓延的今天&#xff0c;事实核查已成为维护信息生态的“免疫系统”。但传统核查…

【小程序】订单数据缓存 以及针对海量库存数据的 懒加载+数据分片 的具体实现方式

订单数据缓存 以及针对海量库存数据的 懒加载数据分片 的具体实现方式&#xff0c;结合UniApp微信小程序的技术栈&#xff0c;分两部分详细拆解落地思路和核心代码&#xff0c;既讲逻辑也给可落地的实现方案。 一、订单数据缓存的实现&#xff08;低网环境适配核心&#xff09;…

救命神器2026专科生必看!8个AI论文网站深度测评与推荐

救命神器2026专科生必看&#xff01;8个AI论文网站深度测评与推荐 2026年专科生论文写作必备工具测评 随着AI技术的不断进步&#xff0c;越来越多的专科生开始借助AI工具提升论文写作效率。然而&#xff0c;面对市场上琳琅满目的论文辅助平台&#xff0c;如何选择真正适合自己需…

FHIR 中 _summary 参数

前言 在构建基于 HL7 FHIR&#xff08;Fast Healthcare Interoperability Resources&#xff09;标准的医疗信息系统时&#xff0c;开发者和架构师常常面临一个关键问题&#xff1a;如何在保证数据完整性的同时&#xff0c;优化网络传输效率与客户端处理性能&#xff1f; FHI…

AI自动化编排:从入门到精通(基于Dify构建AI智能系统)

目录第一篇&#xff1a;范式重构 —— AI 编排底层基石第1章 AI 自动化编排&#xff1a;开启“人机协同”新时代1.1 从命令式编程到声明式编排1.2 LLM 为什么需要“手脚”&#xff1a;AI 应用的三阶段演化1.3 AI 编排的核心目标&#xff1a;让系统具备行动能力1.4 技术选型逻辑…

Nuxt3全栈开发实战指南

目录第一篇&#xff1a;全栈基石 —— Nuxt 核心概念篇第 1 章&#xff1a;NuxtJS 的前世今生与生态位现代 Web 开发的痛点&#xff08;SEO、白屏、开发效率&#xff09;什么是 NuxtJS&#xff1a;Vue 3 的超集与全栈框架SSR&#xff08;服务端渲染&#xff09;、SSG&#xff0…

为什么AI算法工程师年薪能破百万?大厂高薪岗位学习指南与实战经验分享_月薪35-50k 16薪

大模型算法工程师成为当前薪资最高的技术岗位&#xff0c;月薪中位数近3万元&#xff0c;顶尖人才年薪破百万。字节、腾讯等大厂大量扩招AI人才&#xff0c;DeepSeek等开出高达154万年薪。然而多数求职者能力不足以满足企业需求。《AI算法工程师培养计划》由一线大厂专家主讲&a…

深度学习计算机毕设之基于python-CNN深度学习的卷积神经网络对狗的行为识别

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

不用卡尺怎么测量复杂零件尺寸?告别卡尺,精准高效:SIMSCAN-E手持扫描仪在复杂零件检测中的革命性应用

告别卡尺&#xff0c;精准高效&#xff1a;SIMSCAN-E手持扫描仪在复杂零件检测中的革命性应用图1&#xff1a;思看科技&#xff08;SCANTECH&#xff09;—全球领先的三维视觉产品与解决方案提供商一、机械加工与来料检测的挑战&#xff1a;传统测量方法的局限在机械加工和来料…

【毕业设计】深度学习基于python-CNN深度学习对宠物体型识别

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

【毕业设计】深度学习基于python-CNN深度学习对宠物体型识别

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

南昌出租车打表价格为3.15元/公里,没有燃油费,大家觉得贵吗?2026.1.1

南昌出租车打表价格为3.15元/公里&#xff0c;没有燃油费&#xff0c;大家觉得贵吗&#xff1f;

【课程设计/毕业设计】基于机器学习python-CNN深度学习对宠物体型识别

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

【课程设计/毕业设计】通过python的对狗的体型识别通过python-CNN深度学习对狗的体型识别

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

动态机器码

链接&#xff1a;https://pan.quark.cn/s/e84e768b1e70

动态机器码

链接&#xff1a;https://pan.quark.cn/s/e84e768b1e70

上海AI实验室突破:视觉提示技术实现机器人多角度感知

这项突破性研究来自上海AI实验室、清华大学、上海交通大学和密歇根大学的联合团队&#xff0c;发表于2025年1月的arXiv预印本平台&#xff08;论文编号&#xff1a;arXiv:2601.05241v1&#xff09;。想要深入了解技术细节的读者可以通过这个编号查询完整论文。现代机器人要想真…

Edge Remove

链接&#xff1a;https://pan.quark.cn/s/d1b49f057f4c软件特点无界面设计&#xff1a;为用户提供了简洁的操作体验。一键卸载&#xff1a;用户只需点击一次&#xff0c;即可开始卸载Microsoft Edge。确认卸载功能&#xff1a;在进行卸载之前&#xff0c;会有一个确认过程&…