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

任务(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://xiahunao.cn/news/2906051.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

Unity类银河恶魔城学习记录11-7 p109 Aplly item modifiers源代码

Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释&#xff0c;可供学习Alex教程的人参考 此代码仅为较上一P有所改变的代码 【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili ItemData_Equipment.cs using System.Collections; using System.Collecti…

1. Java概述

文章目录 1.Java语言概述1.1 Java介绍1.1.1 软件开发概述1.1.2 计算机语言1.1.3 Java 简史1.1.4 Java 技术体系平台1.1.5 Java在各领域的应用1.1.6 Java语言特点1.1.7 Java核心机制一-Java虚拟机1.1.8 Java核心机制二-垃圾回收1.1.9 Java开发工具 1.2 Java环境搭建1.2.1 JDK、J…

【软件安装】(十四)Ubuntu22.04安装Psensor硬件监视器

一个愿意伫立在巨人肩膀上的农民...... Ubuntu系统硬件运行查询输入指令太繁琐&#xff0c;终端展示不直观&#xff0c;因此这款具有可视化监控Ubuntu系统下当前电脑的硬件CPU&#xff08;中央处理器&#xff09;、GPU&#xff08;显卡&#xff09;和硬盘等温度等功能&#xff…

【JAVAEE学习】探究Java中多线程的使用和重点及考点

˃͈꒵˂͈꒱ write in front ꒰˃͈꒵˂͈꒱ ʕ̯•͡˔•̯᷅ʔ大家好&#xff0c;我是xiaoxie.希望你看完之后,有不足之处请多多谅解&#xff0c;让我们一起共同进步૮₍❀ᴗ͈ . ᴗ͈ აxiaoxieʕ̯•͡˔•̯᷅ʔ—CSDN博客 本文由xiaoxieʕ̯•͡˔•̯᷅ʔ 原创 CSDN 如…

安装uim-ui插件不成功,成功解决

安装&#xff1a;这种安装&#xff0c;umi4 不支持&#xff0c;只有umi3才支持。而我发现官网现在默认使用的umi4。 yarn add umijs/preset-ui -D 解决&#xff1a;更改umi版本重新安装umi3 npm i ant-design/pro-cli3.1.0 -g #使用umi3 (指定umi3版本) pro create user-ce…

每日一题 第五十期 Codeforces Round 937 (Div. 4)

F. 0, 1, 2, Tree! time limit per test: 2 seconds memory limit per test: 256 megabytes input: standard input output: standard output Find the minimum height of a rooted tree † ^{\dagger} † with a b c abc abc vertices that satisfies the following c…

Python学习:模块

python 模块 Python 的模块是一个包含 Python 代码的文件&#xff0c;被用来组织和重用代码。下面详细解释模块&#xff0c;并给出一个示例&#xff1a; 创建模块&#xff1a;要创建模块&#xff0c;只需编写包含函数、类或变量的 Python 文件&#xff0c;并将其保存为以 .py 结…

在宝塔面板中,为自己的云服务器安装SSL证书,为所搭建的网站启用https(主要部分攻略)

前提条件 My HTTP website is running Nginx on Debian 10&#xff08;或者11&#xff09; 时间&#xff1a;2024-3-28 16:25:52 你的网站部署在Debain 10&#xff08;或者11&#xff09;的 Nginx上 安装单域名证书&#xff08;默认&#xff09;&#xff08;非泛域名&#xf…

香港服务器怎么看是CN2 GT线路还是CN2 GIA线路?

不知道有没有小伙伴们注意过&#xff0c;很多人在租用香港服务器的时候都习惯性选择 CN2 线路&#xff1f;仿佛香港服务器是否采用 CN2 线路成为个人企业选择香港服务器的一个标准。其实&#xff0c;香港服务器有CN2、优化直连(163)、BGP多线(包含了国际和国内线路)&#xff0c…

健身运动耳机哪个牌子好?力荐五大品质翘楚的精品

健身已经成为许多人追求健康与活力的重要方式&#xff0c;而在健身的过程中&#xff0c;一款优质的耳机不仅能让你沉浸于音乐的世界&#xff0c;更能提升运动体验&#xff0c;激发无限潜能&#xff0c;那么如何选择一款既适合运动又品质卓越的耳机呢&#xff1f;今天我这个健身…

自动发卡平台源码优化版,支持个人免签支付

源码下载地址&#xff1a;自动发卡平台源码优化版.zip 环境要求&#xff1a; php 8.0 v1.2.6◂ 1.修复店铺共享连接时异常问题 2024-03-13 23:54:20 v1.2.5 1.[新增]用户界面硬币增款扣款操作 2.[新增]前台对接库存信息显示 3.[新增]文件缓存工具类[FileCache] 4.[新增]库存同…

期货开户要找到适合自己的系统

物有一个生物圈&#xff0c;大鱼吃小鱼&#xff0c;小鱼吃虾。在期货市场这条生物圈里面&#xff0c;大部分人就是期货市场的虾子&#xff0c;是被吃的&#xff0c;所以必须成长起来&#xff0c;往更高一层走&#xff0c;到可以吃虾子的时候&#xff0c;就是挣钱的时候。学习不…

buy me a btc 使用数字货币进行打赏赞助

最近在调研使用加密货币打赏的平台&#xff0c;发现idatariver平台 https://idatariver.com 推出的buymeabtc功能刚好符合使用场景&#xff0c;下图为平台的演示项目, 演示项目入口 https://buymeabtc.com/idatariver 特点 不少人都听说过buymeacoffee&#xff0c;可以在上面发…

Vue element-plus 导航栏 [el-menu]

导航栏 [el-menu] Menu 菜单 | Element Plus el-menu有很多属性和子标签&#xff0c;为网站提供导航功能的菜单。 常用标签&#xff1a; 它里面有两个子标签。el-menu-item&#xff0c;它其实就是el-menu每一个里面的item&#xff0c;item就是真实匹配到路由的每个栏目&#…

AP5414 0.8-5.5升压恒压 WLED 太阳能电源驱动方案

产品简介 AP5414 是一种输入电压范围宽&#xff08;0.8~5.5V&#xff09;&#xff0c;可调恒定电流和限定电流两种模式来 驱动白光 LED 而设计的升压型 DC/DC 变换器。该器件能利用单节或双节干电池驱动单 颗大功率白光 LED&#xff0c;同样可以利用一节锂电池驱动两颗、三颗或…

Java基础-子类与继承

(创作不易&#xff0c;感谢有你&#xff0c;你的支持&#xff0c;就是我前行的最大动力&#xff0c;如果看完对你有帮助&#xff0c;请留下您的足迹&#xff09; 目录 一、继承的概念 二、Java 方法重写 三、Object类 方法 四、final关键字 final 变量 五、Java 多态 …

基于CNN-RNN的动态手势识别系统实现与解析

一、环境配置 为了成功实现基于CNN-RNN的动态手势识别系统&#xff0c;你需要确保你的开发环境已经安装了以下必要的库和工具&#xff1a; Python&#xff1a;推荐使用Python 3.x版本&#xff0c;作为主要的编程语言。TensorFlow&#xff1a;深度学习框架&#xff0c;用于构建…

2024 蓝桥打卡Day25

CCFCSP算法练习 202305-1 重复局面 202305-2 矩阵运算 202303-1 田地丈量 202303-2 垦田计划

自学新标日第九课 (完结)

第九课 单词 单词假名声调词义料理りょうり1菜四川料理しせんりょうり4四川菜スープ1汤ペギンダック4北京烤鸭食べ物たべもの3食物すき焼きすきやき0日式牛肉火锅温泉おんせん&#xff10;おんせんお湯おゆ0热水水みず&#xff10;凉水浴衣ゆかた&#xff10;浴衣眺めながめ&…

kubernetes(K8S)学习(五):K8S进阶(Lifecycle......偏理论)

K8S进阶&#xff08;Lifecycle......偏理论&#xff09; 一、Pod进阶学习之路1.1 Lifecycle1.2 重启策略1.3 静态Pod1.4 健康检查1.5 ConfigMap1.6 Secret1.7 指定Pod所运行的Node 二、Controller进阶学习之路2.1 Job & CronJob2.2 StatefulSet2.3 DaemonSet2.4 Horizontal…