0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

鸿蒙开发:任务(Mission)管理场景介绍

jf_46214456 来源:jf_46214456 作者:jf_46214456 2024-06-13 14:37 次阅读

任务(Mission)管理场景介绍

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

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

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

  • 删除一个指定的任务。
  • 加锁或解锁一个指定的任务(加锁后的任务在清理所有任务时不会被清理)。
  • 清理最近任务列表中的所有任务。
  • 将一个指定的任务切换到前台。

一个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 hilog from '@ohos.hilog';
    
    const TAG: string = 'TaskManager';
    const DOMAIN_NUMBER: number = 0xFF00;
    
    private listenerId: number = 0;
    private missionId: number = 0;
    private listener: missionManager.MissionListener = {
      // 任务创建
      onMissionCreated: (mission: number) = > {
        hilog.info(DOMAIN_NUMBER, TAG, '--------onMissionCreated-------');
      },
      // 任务销毁
      onMissionDestroyed: (mission: number) = > {
        hilog.info(DOMAIN_NUMBER, TAG, '--------onMissionDestroyed-------');
      },
      // 任务快照变化
      onMissionSnapshotChanged: (mission: number) = > {
        hilog.info(DOMAIN_NUMBER, TAG, '--------onMissionMovedToFront-------');
      },
      // 任务被移动到前台
      onMissionMovedToFront: (mission: number) = > {
        hilog.info(DOMAIN_NUMBER, TAG, '--------onMissionClosed-------');
      },
      // 任务图标变化
      onMissionIconUpdated: (mission: number, icon: image.PixelMap) = > {
        hilog.info(DOMAIN_NUMBER, TAG, '--------onMissionIconUpdated-------');
      },
      // 任务名称变化
      onMissionLabelUpdated: (mission: number) = > {
        hilog.info(DOMAIN_NUMBER, TAG, '--------onMissionLabelUpdated-------');
      },
      // 任务实例被关闭
      onMissionClosed: (mission: number) = > {
        hilog.info(DOMAIN_NUMBER, TAG, '--------onMissionClosed-------');
      }
    };
    
    // 1.注册任务变化通知
    this.listenerId = missionManager.on('mission', this.listener);
    promptAction.showToast({
      message: $r('app.string.register_success_toast')
    });
    hilog.info(DOMAIN_NUMBER, TAG, `missionManager.on success, listenerId = ${this.listenerId}`);
    
    // 2.获取系统最近20个任务
    missionManager.getMissionInfos('', 20, (error: BusinessError, missions: Array< missionManager.MissionInfo >) = > {
      hilog.info(DOMAIN_NUMBER, TAG, 'getMissionInfos is called, error = ' + JSON.stringify(error));
      hilog.info(DOMAIN_NUMBER, TAG, 'size = ' + missions.length);
      hilog.info(DOMAIN_NUMBER, TAG, 'missions = ' + JSON.stringify(missions));
    
      // 判断系统最近任务中是否包含etsclock
      for (let i = 0;i < missions.length; i++) {
        if (missions[i].want.bundleName === 'ohos.samples.etsclock') {
          promptAction.showToast({
            message: $r('app.string.obtain_success_toast')
          });
          hilog.info(DOMAIN_NUMBER, 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)
      });
      hilog.info(DOMAIN_NUMBER, TAG, `getMissionInfo successfully. Data: ${JSON.stringify(data)}`);
    }).catch((error: BusinessError) = > {
      hilog.info(DOMAIN_NUMBER, 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')
        });
      }
      hilog.info(DOMAIN_NUMBER, TAG, 'getMissionSnapShot is called, error = ' + JSON.stringify(error));
      hilog.info(DOMAIN_NUMBER, 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')
        });
      }
      hilog.info(DOMAIN_NUMBER, TAG, 'getLowResolutionMissionSnapShot is called, error = ' + JSON.stringify(error));
      hilog.info(DOMAIN_NUMBER, TAG, 'bundleName = ' + snapshot.ability.bundleName);
    })
    
    // 6-1 加锁任务
    missionManager.lockMission(this.missionId).then(() = > {
      promptAction.showToast({
        message: $r('app.string.lock_success_toast')
      });
      hilog.info(DOMAIN_NUMBER, TAG, 'lockMission is called ');
    });
    
    // 6-2 解锁任务
    missionManager.unlockMission(this.missionId).then(() = > {
      promptAction.showToast({
        message: $r('app.string.unlock_success_toast')
      });
      hilog.info(DOMAIN_NUMBER, TAG, 'unlockMission is called ');
    });
    
    // 7.把任务切到前台
    missionManager.moveMissionToFront(this.missionId).then(() = > {
      hilog.info(DOMAIN_NUMBER, TAG, 'moveMissionToFront is called ');
    });
    
    // 8.删除单个任务
    missionManager.clearMission(this.missionId).then(() = > {
      promptAction.showToast({
        message: $r('app.string.delete_success_toast')
      });
      hilog.info(DOMAIN_NUMBER, TAG, 'clearMission is called ');
    });
    
    // 9.删除全部任务
    missionManager.clearAllMissions().catch((err: BusinessError) = > {
      hilog.info(DOMAIN_NUMBER, TAG, `${err.code}`);
    });
    
    // 10.解注册任务变化通知
    missionManager.off('mission', this.listenerId, (error: BusinessError) = > {
      if (error === null) {
        promptAction.showToast({
          message: $r('app.string.unregister_success_toast')
        });
      }
      hilog.info(DOMAIN_NUMBER, TAG, 'unregisterMissionListener');
    })
    

审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 鸿蒙
    +关注

    关注

    57

    文章

    2323

    浏览量

    42752
收藏 人收藏

    评论

    相关推荐

    华为鸿蒙—时代的开启者!

    `在开始之前先给大家介绍下华为鸿蒙吧,鸿蒙微内核是基于微内核的全场景分布式OS,可按需扩展,实现更广泛的系统安全,主要用于物联网,特点是低时延,甚至可到毫秒级乃至亚毫秒级。
    发表于 09-03 11:19

    为满足全场景智慧体验 鸿蒙系统一四大技术特性!

    鸿蒙OS的设计初衷是为满足全场景智慧体验的高标准的连接要求,为此华为提出了4大特性的系统解决方案。1. 分布式架构首次用于终端OS,实现跨终端无缝协同体验鸿蒙OS的“分布式OS架构”和“分布式软总线
    发表于 09-03 21:09

    华为鸿蒙一时代的开启者!

    `在开始之前先给大家介绍下华为鸿蒙吧,鸿蒙微内核是基于微内核的全场景分布式OS,可按需扩展,实现更广泛的系统安全,主要用于物联网,特点是低时延,甚至可到毫秒级乃至亚毫秒级。
    发表于 09-04 09:41

    鸿蒙OS适用的全场景到底什么意思?

    上,未来会有越来越多的智能设备使用开源的鸿蒙OS。华为消费者业务CEO余承东在介绍鸿蒙OS开发初衷时表示:“随着全场景智慧时代的到来,华为认
    发表于 09-25 09:25

    鸿蒙介绍

    这份资料主要是对鸿蒙概念的扫盲,这里介绍鸿蒙的应用场景和技术框架,同时也有1000+页,非常详细的入门手册。这份资料具体的内容有:HarmonyOS快速入门手册2.0通用设计基础Ha
    发表于 11-24 10:49

    [文章] HarmonyOS学习之一:鸿蒙HarmonyOS系统介绍

    华为的鸿蒙系统优点是流畅度和大一统。这套系统主要是基于微内核的全场景分布式OS,可以按照需要进行扩展,由此来实现更为广泛的系统的安全,它主要用于物联网,它的主要特点是很低的时延。HarmonyOS
    发表于 11-26 15:26

    [文章] HarmonyOS学习之一:鸿蒙HarmonyOS系统介绍

    华为的鸿蒙系统优点是流畅度和大一统。这套系统主要是基于微内核的全场景分布式OS,可以按照需要进行扩展,由此来实现更为广泛的系统的安全,它主要用于物联网,它的主要特点是很低的时延。HarmonyOS
    发表于 12-02 16:57

    【有奖讨论】鸿蒙操作系统及华为全场景新品发布会

    新品发布会这场直播会为大家揭示什么呢?首批搭载鸿蒙手机上线?鸿蒙场景新品类发布!平板?智慧屏?全屋智能?智能座舱、车机?各位开发者没有不爱电子产品的吧?大家希望这次的华为全
    发表于 05-28 19:07

    鸿蒙应用开发入门资料合集

    开发难度!赞!2、鸿蒙应用开发入门资料二:开发环境搭建下载HarmonyOS SDK DevEco Studio提供SDK Manager统一管理
    发表于 03-22 11:23

    鸿蒙开源全场景应用开发资料汇总

    1、鸿蒙开源全场景应用开发——视频编解码面对鸿蒙这一全新的生态,广大消费者在积极尝鲜的同时,家中不可避免会出现安卓设备和鸿蒙设备并存的现象,
    发表于 03-23 10:09

    【学习打卡】----鸿蒙系统开发过程中的心得体会

    的设计模式,带来的就是一种颠覆式的用户体验。而其底层基础就在于特有的分布式任务调度、分布式数据管理等能力,有兴趣的朋友可以关注一下。3、鸿蒙方便产品生态的建设一次开发多端部署,体现了
    发表于 07-03 18:07

    润和软件鸿蒙场景开发与教学创新解决方案赋能高校ICT人才培养

    、智慧出行、运动健康五大场景下的创新体验,基于新的HarmonyOS开发技术给开发者构筑更加高效便捷的开发平台,并呈现了丰富的开发者活动。携
    发表于 11-09 10:22

    鸿蒙 OS 应用开发初体验

    什么是 HarmonyOS? HarmonyOS(鸿蒙操作系统)是华为公司开发的一款基于微内核的分布式操作系统。它是一个面向物联网(IoT)时代的全场景操作系统,旨在为各种类型的设备提供统一
    发表于 11-02 19:38

    鸿蒙OS 分布式任务调度

    鸿蒙OS 分布式任务调度概述 在 HarmonyO S中,分布式任务调度平台对搭载 HarmonyOS 的多设备构筑的“超级虚拟终端”提供统一的组件管理能力,为应用定义统一的能力基线、
    的头像 发表于 01-29 16:50 467次阅读

    鸿蒙开发任务Mission)与启动模式

    如前文所述,一个UIAbility实例对应一个任务。UIAbility实例个数与UIAbility配置的启动模式有关。在FA模型下,通过config.json配置文件中的“launchType”属性
    的头像 发表于 06-14 11:31 404次阅读
    <b class='flag-5'>鸿蒙</b><b class='flag-5'>开发</b>:<b class='flag-5'>任务</b>(<b class='flag-5'>Mission</b>)与启动模式