HarmonyOS 应用开发之任务(Mission)管理场景介绍

news/2024/6/16 9:54:37/文章来源:https://blog.csdn.net/maniuT/article/details/137148495

任务(Mission)管理相关的基本概念如下:

  • AbilityRecord:系统服务侧管理一个UIAbility实例的最小单元,对应一个应用侧的UIAbility组件实例。系统服务侧管理UIAbility实例数量上限为512个。
  • MissionRecord:任务管理的最小单元。一个MissionRecord中仅有一个AbilityRecord,即一个UIAbility组件实例对应一个单独的任务。
  • MissionList:一个从桌面开始启动的任务列表,记录了任务之间的启动关系,下一个任务由上一个任务启动,最底部的任务由桌面启动,这里称之为任务链。
  • MissionListManager:系统任务管理模块,内部维护了当前所有的任务链,与最近任务列表保持一致。

图1 任务管理示意图

任务的管理由系统应用(如桌面应用)负责,三方应用无法管理任务。用户通过最近任务列表进行任务的相关交互。当创建任务后,用户可以对最近任务列表进行如下操作:

  • 删除一个指定的任务。

  • 加锁或解锁一个指定的任务(加锁后的任务在清理所有任务时不会被清理)。

  • 清理最近任务列表中的所有任务。

  • 将一个指定的任务切换到前台。

一个UIAbility实例对应一个单独的任务,因此应用调用startAbility() 方法启动一个UIAbility时,就是创建了一个任务。

  1. 桌面应用调用 missionManager 的接口管理任务,需要申请ohos.permission.MANAGE_MISSIONS权限,配置方式请参见 申请应用权限 。

  2. 利用missionManager进行任务管理(监听任务变化、获取任务信息、获取任务快照、清理任务、任务加锁/解锁等)。

import missionManager from '@ohos.app.ability.missionManager';
import { BusinessError } from '@ohos.base';
import image from '@ohos.multimedia.image';
import promptAction from '@ohos.promptAction';
import Logger from '../utils/Logger';const TAG: string = 'TaskManager';

private listenerId: number = 0;
private missionId: number = 0;
private listener: missionManager.MissionListener = {// 任务创建onMissionCreated: (mission: number) => {Logger.info(TAG, '--------onMissionCreated-------');},// 任务销毁onMissionDestroyed: (mission: number) => {Logger.info(TAG, '--------onMissionDestroyed-------');},// 任务快照变化onMissionSnapshotChanged: (mission: number) => {Logger.info(TAG, '--------onMissionSnapshotChanged-------');},// 任务被移动到前台onMissionMovedToFront: (mission: number) => {Logger.info(TAG, '--------onMissionMovedToFront-------');},// 任务图标变化onMissionIconUpdated: (mission: number, icon: image.PixelMap) => {Logger.info(TAG, '--------onMissionIconUpdated-------');},// 任务名称变化onMissionLabelUpdated: (mission: number) => {Logger.info(TAG, '--------onMissionLabelUpdated-------');},// 任务实例被关闭onMissionClosed: (mission: number) => {Logger.info(TAG, '--------onMissionClosed-------');}
};

// 1.注册任务变化通知
this.listenerId = missionManager.on('mission', this.listener);
promptAction.showToast({message: $r('app.string.register_success_toast')
});
Logger.info(TAG, `missionManager.on success, listenerId = ${this.listenerId}`);

// 2.获取系统最近20个任务
missionManager.getMissionInfos('', 20, (error: BusinessError, missions: Array<missionManager.MissionInfo>) => {Logger.info(TAG, 'getMissionInfos is called, error = ' + JSON.stringify(error));Logger.info(TAG, 'size = ' + missions.length);Logger.info(TAG, 'missions = ' + JSON.stringify(missions));// 判断系统最近任务中是否包含etsclockfor (let i = 0;i < missions.length; i++) {if (missions[i].want.bundleName === 'ohos.samples.etsclock') {promptAction.showToast({message: $r('app.string.obtain_success_toast')});Logger.info(TAG, `getMissionInfos.find etsclock, missionId  = ${missions[i].missionId}`);this.missionId = missions[i].missionId;return;}}promptAction.showToast({message: $r('app.string.obtain_failed_toast')});
});

// 3.获取单个任务的详细信息()
missionManager.getMissionInfo('', this.missionId).then((data: missionManager.MissionInfo) => {promptAction.showToast({message: JSON.stringify(data.want.bundleName)});Logger.info(TAG, `getMissionInfo successfully. Data: ${JSON.stringify(data)}`);
}).catch((error: BusinessError) => {Logger.error(TAG, `getMissionInfo failed. Cause: ${error.message}`);
});

// 4.获取任务快照
missionManager.getMissionSnapShot('', this.missionId, (error: BusinessError, snapshot: missionManager.MissionSnapshot) => {if (error === null) {promptAction.showToast({message: $r('app.string.obtain_snapshot_success_toast')});}Logger.info(TAG, 'getMissionSnapShot is called, error = ' + JSON.stringify(error));Logger.info(TAG, 'bundleName = ' + snapshot.ability.bundleName);
})

// 5.获取低分辨任务快照
missionManager.getLowResolutionMissionSnapShot('', this.missionId, (error: BusinessError, snapshot: missionManager.MissionSnapshot) => {if (error === null) {promptAction.showToast({message: $r('app.string.obtain_low_snapshot_success_toast')});}Logger.info(TAG, 'getLowResolutionMissionSnapShot is called, error = ' + JSON.stringify(error));Logger.info(TAG, 'bundleName = ' + snapshot.ability.bundleName);
})

// 6-1 加锁任务
missionManager.lockMission(this.missionId).then(() => {promptAction.showToast({message: $r('app.string.lock_success_toast')});Logger.info(TAG, 'lockMission is called ');
});

// 6-2 解锁任务
missionManager.unlockMission(this.missionId).then(() => {promptAction.showToast({message: $r('app.string.unlock_success_toast')});Logger.info(TAG, 'unlockMission is called ');
});

// 7.把任务切到前台
missionManager.moveMissionToFront(this.missionId).then(() => {Logger.info(TAG, 'moveMissionToFront is called ');
});

// 8.删除单个任务
missionManager.clearMission(this.missionId).then(() => {promptAction.showToast({message: $r('app.string.delete_success_toast')});Logger.info(TAG, 'clearMission is called ');
});

// 9.删除全部任务
missionManager.clearAllMissions().catch((err: BusinessError) => {Logger.info(TAG, `${err.code}`);
});

// 10.解注册任务变化通知
missionManager.off('mission', this.listenerId, (error: BusinessError) => {if (error === null) {promptAction.showToast({message: $r('app.string.unregister_success_toast')});}Logger.info(TAG, 'unregisterMissionListener');
})

为了能让大家更好的学习鸿蒙(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.鸿蒙南向开发方向

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

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

相关文章

物联网学习2、MQTT 发布/订阅模式介绍

MQTT 发布/订阅模式 发布订阅模式&#xff08;Publish-Subscribe Pattern&#xff09;是一种消息传递模式&#xff0c;它将发送消息的客户端&#xff08;发布者&#xff09;与接收消息的客户端&#xff08;订阅者&#xff09;解耦&#xff0c;使得两者不需要建立直接的联系也不…

Kubernetes(K8S)学习(四):K8S之Storage

K8S之Storage 一、Storage1.1、Volume1.2、PersistentVolume&#xff08;PV&#xff09;1.3、PersistentVolumeClaim&#xff08;PVC&#xff09;1.4、StorageClass1.5、PV的状态和回收策略 kubernetes使用NFS共享存储有两种方式&#xff1a; &#xff08;1&#xff09;手动方式…

Spring——框架介绍

每一个Java技术中都会存在一个“核心对象”&#xff0c;这个核心对象来完成主要任务为了得到核心对象&#xff0c;需要创建若干个辅助对象&#xff0c;从而导致开发步骤增加JDBC中 JDBC 核心对象——PreparedStatement 通过DriverManager得到数据库厂商提供的Driver对象DriverM…

如何在Win10部署Oracle数据库并实现无公网IP使用PL SQL远程访问

文章目录 前言1. 数据库搭建2. 内网穿透2.1 安装cpolar内网穿透2.2 创建隧道映射 3. 公网远程访问4. 配置固定TCP端口地址4.1 保留一个固定的公网TCP端口地址4.2 配置固定公网TCP端口地址4.3 测试使用固定TCP端口地址远程Oracle 前言 Oracle&#xff0c;是甲骨文公司的一款关系…

Vivado VIO IP核(Virtual Input/Output)的使用

前言 在Aurora通信工程中&#xff0c;有一个专门产生Aurora数据包的模块&#xff0c;该模块在Aurora ip准备好后会自动根据计数器产生发送的数据包。 但现在希望能实时地控制数据包的发送以及中断&#xff0c;这时候可以采用vivado的vio ip核处理。 VIO IP 调用VIO IP核可以…

MySQL主从复制与读写分离(重要!)

目录 引言 一、主从复制 1.1 MySQL主从复制原理 1.1.1 为什么进行复制&#xff1f; 1.1.2 谁复制谁&#xff1f; 1.1.3 数据放在什么地方&#xff1f; 1.1.4 MySQL主从版本问题 1.2 MySQL的复制类型 1.3 MySQL主从复制的工作过程 1.4 MySQL主从复制延迟原因 1.5 MyS…

云原生(七)、Kubernetes初学 + 裸机搭建k8s集群

Kubernetes简介 Kubernetes&#xff08;通常简称为K8s&#xff09;是一个开源的容器编排平台&#xff0c;最初由Google设计和开发&#xff0c;现在由Cloud Native Computing Foundation&#xff08;CNCF&#xff09;维护。它旨在简化容器化应用程序的部署、扩展和管理。 Kube…

[GN] Spring Security 和 SHiro的配置使用

文章目录 SHiroSpring Security SHiro Shrio安全框架更灵活和简单&#xff0c;代码易读使用简单 但授权第三方登录需要手动实现 配置shrio的核心内容 安全管理器 realm Configuration public class ShiroConfig {//0.配置shrioFilterBean("shiroFilter")public Sh…

什么是跨域问题,SpringBoot如何解决?

目录 什么是跨域&#xff1f;如何解决跨域问题&#xff1f;JSONP (JSON with Padding)CORS(跨源资源共享)CrossOrigin注解实现WebMvcConfigurer addCorsMappingsCorsFilter 代理服务器反向代理(推荐) 什么是跨域&#xff1f; 跨域是指浏览器为了安全性&#xff0c;设定的一种同…

蓝桥杯第八届c++大学B组详解

目录 1.购物单 2.等差素数列 3.承压计算 4.方格分割 5.日期问题 6.包子凑数 7.全球变暖 8.k倍区间 1.购物单 题目解析&#xff1a;就是将折扣字符串转化为数字&#xff0c;进行相加求和。 #include<iostream> #include<string> #include<cmath> usin…

【Java面试题系列】基础篇

目录 基本常识标识符的命名规则八种基本数据类型的大小&#xff0c;以及他们的封装类3*0.10.3返回值是什么short s1 1; s1 s1 1;有什么错? short s1 1; s1 1;有什么错?简述&&与&的区别&#xff1f;简述break与continue、return的区别&#xff1f;Arrays类的…

常见的三维建模软件有哪些?

云端地球是一款免费的在线实景三维建模软件&#xff0c;不需要复杂的技巧&#xff0c;只要需要手机&#xff0c;多拍几张照片&#xff0c;就可以得到完整的三维模型&#xff01; 无论是大场景倾斜摄影测量还是小场景、小物体建模&#xff0c;都可以通过云端地球将二维数据向三…

宝塔面板 -- 打包前端项目并部署提升访问速度

文章目录 前言一、打包前端项目二、添加PHP项目三、部署打包文件四、开通防火墙五、运行网站总结 前言 在前面写到的文章使用宝塔面板部署前端项目中&#xff0c;并没有将前端项目打包而是直接部署&#xff0c;导致网站访问速度非常慢&#xff0c;加载甚至要十几秒。因此&…

两张图片相似度匹配算法学习路线

大纲&#xff1a;​​​​​​目标跟踪基础&#xff1a;两张图片相似度算法-腾讯云开发者社区-腾讯云 (tencent.com) 目标跟踪基础&#xff1a;两张图片相似度算法 (qq.com) 一、传统方法 1.欧式距离&#xff08;用于判断是否完全相同&#xff09; [三维重建] [机器学习] 图…

Vue2.x安装Tinymce依赖冲突解决

Vue2.x安装Tinymce依赖冲突原因 使用vue整合tinymce富文本编辑器&#xff0c;安装依赖时报错 报错的原因是下载版本与vue的版本对不上vue2.x版本应该使用如下指定版本依赖更合适 npm install --save "tinymce/tinymce-vue^3.1"额外依赖为 npm install --save &quo…

“和美大桥 共创未来”,共富联合体打响稽东优质春茶金字招牌

2024年3月31日&#xff0c;由日茗康茶业主办&#xff0c;稽东“和美大桥 共创未来”乡村共富联合体协办的“第二届稽东春山好暨日茗康新茶品鉴会”活动在绍兴市柯桥区稽东镇大桥村委举行。 新茶品鉴会上有来自绍兴市、柯桥区、稽东镇的有关领导出席&#xff0c;茶友及行业专家1…

leetcode刷题-字符串

目录 1、Reverse String 反转字符串 2、Reverse String II 反转字符串II 3、Reverse Words in a String 翻转字符串里的单词 4、Find the Index of the FirstOccurrence in a String 实现 strStr() KMP算法 next数组如何建立 模式串和字符串匹配 5、Repeated Substring…

Rust---有关介绍

目录 Rust---有关介绍变量的操作Rust 数值库&#xff1a;num某些基础数据类型序列(Range)字符类型单元类型 发散函数表达式&#xff08;&#xff01; 语句&#xff09; Rust—有关介绍 得益于各种零开销抽象、深入到底层的优化潜力、优质的标准库和第三方库实现&#xff0c;Ru…

【物联网】Qinghub opc-ua 连接协议

基础信息 组件名称 &#xff1a; opcua-connector 组件版本&#xff1a; 1.0.0 组件类型&#xff1a; 系统默认 状 态&#xff1a; 正式发布 组件描述&#xff1a;通过OPCUA连接网关&#xff0c;通过定时任务获取OPCUA相关的数据或通过执行指令控制设备相关参数。 配置文件&a…

鸿蒙HarmonyOS应用开发之Native与ArkTS对象绑定

场景介绍 通过napi_wrap将ArkTS对象与Native的C对象绑定&#xff0c;后续操作时再通过napi_unwrap将ArkTS对象绑定的C对象取出&#xff0c;并对其进行操作。 使用示例 接口声明、编译配置以及模块注册 接口声明 // index.d.ts export class MyObject {constructor(arg: num…