0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

鴻蒙開發(fā):任務(wù)(Mission)管理場景介紹

jf_46214456 ? 來源:jf_46214456 ? 作者:jf_46214456 ? 2024-06-13 14:37 ? 次閱讀

任務(wù)(Mission)管理場景介紹

任務(wù)(Mission)管理相關(guān)的基本概念如下:

  • AbilityRecord:系統(tǒng)服務(wù)側(cè)管理一個UIAbility實例的最小單元,對應(yīng)一個應(yīng)用側(cè)的UIAbility組件實例。系統(tǒng)服務(wù)側(cè)管理UIAbility實例數(shù)量上限為512個。
  • MissionRecord:任務(wù)管理的最小單元。一個MissionRecord中僅有一個AbilityRecord,即一個UIAbility組件實例對應(yīng)一個單獨的任務(wù)。
  • MissionList:一個從桌面開始啟動的任務(wù)列表,記錄了任務(wù)之間的啟動關(guān)系,下一個任務(wù)由上一個任務(wù)啟動,最底部的任務(wù)由桌面啟動,這里稱之為任務(wù)鏈。
  • MissionListManager:系統(tǒng)任務(wù)管理模塊,內(nèi)部維護了當前所有的任務(wù)鏈,與最近任務(wù)列表保持一致。
    圖1 任務(wù)管理示意圖
    mission-list-manager

任務(wù)的管理由系統(tǒng)應(yīng)用(如桌面應(yīng)用)負責,三方應(yīng)用無法管理任務(wù)。用戶通過最近任務(wù)列表進行任務(wù)的相關(guān)交互。當創(chuàng)建任務(wù)后,用戶可以對最近任務(wù)列表進行如下操作:

  • 刪除一個指定的任務(wù)。
  • 加鎖或解鎖一個指定的任務(wù)(加鎖后的任務(wù)在清理所有任務(wù)時不會被清理)。
  • 清理最近任務(wù)列表中的所有任務(wù)。
  • 將一個指定的任務(wù)切換到前臺。

一個UIAbility實例對應(yīng)一個單獨的任務(wù),因此應(yīng)用調(diào)用[startAbility()]方法啟動一個UIAbility時,就是創(chuàng)建了一個任務(wù)。

  1. 桌面應(yīng)用調(diào)用[missionManager]的接口管理任務(wù),需要申請ohos.permission.MANAGE_MISSIONS權(quán)限,配置方式請參見[申請應(yīng)用權(quán)限]。

  2. 利用missionManager進行任務(wù)管理(監(jiān)聽任務(wù)變化、獲取任務(wù)信息、獲取任務(wù)快照、清理任務(wù)、任務(wù)加鎖/解鎖等)。

    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 = {
      // 任務(wù)創(chuàng)建
      onMissionCreated: (mission: number) = > {
        hilog.info(DOMAIN_NUMBER, TAG, '--------onMissionCreated-------');
      },
      // 任務(wù)銷毀
      onMissionDestroyed: (mission: number) = > {
        hilog.info(DOMAIN_NUMBER, TAG, '--------onMissionDestroyed-------');
      },
      // 任務(wù)快照變化
      onMissionSnapshotChanged: (mission: number) = > {
        hilog.info(DOMAIN_NUMBER, TAG, '--------onMissionMovedToFront-------');
      },
      // 任務(wù)被移動到前臺
      onMissionMovedToFront: (mission: number) = > {
        hilog.info(DOMAIN_NUMBER, TAG, '--------onMissionClosed-------');
      },
      // 任務(wù)圖標變化
      onMissionIconUpdated: (mission: number, icon: image.PixelMap) = > {
        hilog.info(DOMAIN_NUMBER, TAG, '--------onMissionIconUpdated-------');
      },
      // 任務(wù)名稱變化
      onMissionLabelUpdated: (mission: number) = > {
        hilog.info(DOMAIN_NUMBER, TAG, '--------onMissionLabelUpdated-------');
      },
      // 任務(wù)實例被關(guān)閉
      onMissionClosed: (mission: number) = > {
        hilog.info(DOMAIN_NUMBER, TAG, '--------onMissionClosed-------');
      }
    };
    
    // 1.注冊任務(wù)變化通知
    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.獲取系統(tǒng)最近20個任務(wù)
    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));
    
      // 判斷系統(tǒng)最近任務(wù)中是否包含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.獲取單個任務(wù)的詳細信息()
    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.獲取任務(wù)快照
    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.獲取低分辨任務(wù)快照
    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 加鎖任務(wù)
    missionManager.lockMission(this.missionId).then(() = > {
      promptAction.showToast({
        message: $r('app.string.lock_success_toast')
      });
      hilog.info(DOMAIN_NUMBER, TAG, 'lockMission is called ');
    });
    
    // 6-2 解鎖任務(wù)
    missionManager.unlockMission(this.missionId).then(() = > {
      promptAction.showToast({
        message: $r('app.string.unlock_success_toast')
      });
      hilog.info(DOMAIN_NUMBER, TAG, 'unlockMission is called ');
    });
    
    // 7.把任務(wù)切到前臺
    missionManager.moveMissionToFront(this.missionId).then(() = > {
      hilog.info(DOMAIN_NUMBER, TAG, 'moveMissionToFront is called ');
    });
    
    // 8.刪除單個任務(wù)
    missionManager.clearMission(this.missionId).then(() = > {
      promptAction.showToast({
        message: $r('app.string.delete_success_toast')
      });
      hilog.info(DOMAIN_NUMBER, TAG, 'clearMission is called ');
    });
    
    // 9.刪除全部任務(wù)
    missionManager.clearAllMissions().catch((err: BusinessError) = > {
      hilog.info(DOMAIN_NUMBER, TAG, `${err.code}`);
    });
    
    // 10.解注冊任務(wù)變化通知
    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');
    })
    

審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 鴻蒙
    +關(guān)注

    關(guān)注

    56

    文章

    2267

    瀏覽量

    42492
收藏 人收藏

    評論

    相關(guān)推薦

    華為鴻蒙—時代的開啟者!

    `在開始之前先給大家介紹下華為鴻蒙吧,鴻蒙微內(nèi)核是基于微內(nèi)核的全場景分布式OS,可按需擴展,實現(xiàn)更廣泛的系統(tǒng)安全,主要用于物聯(lián)網(wǎng),特點是低時延,甚至可到毫秒級乃至亞毫秒級。
    發(fā)表于 09-03 11:19

    為滿足全場景智慧體驗 鴻蒙系統(tǒng)一四大技術(shù)特性!

    鴻蒙OS的設(shè)計初衷是為滿足全場景智慧體驗的高標準的連接要求,為此華為提出了4大特性的系統(tǒng)解決方案。1. 分布式架構(gòu)首次用于終端OS,實現(xiàn)跨終端無縫協(xié)同體驗鴻蒙OS的“分布式OS架構(gòu)”和“分布式軟總線
    發(fā)表于 09-03 21:09

    華為鴻蒙一時代的開啟者!

    `在開始之前先給大家介紹下華為鴻蒙吧,鴻蒙微內(nèi)核是基于微內(nèi)核的全場景分布式OS,可按需擴展,實現(xiàn)更廣泛的系統(tǒng)安全,主要用于物聯(lián)網(wǎng),特點是低時延,甚至可到毫秒級乃至亞毫秒級。
    發(fā)表于 09-04 09:41

    鴻蒙OS適用的全場景到底什么意思?

    上,未來會有越來越多的智能設(shè)備使用開源的鴻蒙OS。華為消費者業(yè)務(wù)CEO余承東在介紹鴻蒙OS開發(fā)初衷時表示:“隨著全場景智慧時代的到來,華為認
    發(fā)表于 09-25 09:25

    鴻蒙介紹

    這份資料主要是對鴻蒙概念的掃盲,這里介紹鴻蒙的應(yīng)用場景和技術(shù)框架,同時也有1000+頁,非常詳細的入門手冊。這份資料具體的內(nèi)容有:HarmonyOS快速入門手冊2.0通用設(shè)計基礎(chǔ)Ha
    發(fā)表于 11-24 10:49

    [文章] HarmonyOS學(xué)習(xí)之一:鴻蒙HarmonyOS系統(tǒng)介紹

    華為的鴻蒙系統(tǒng)優(yōu)點是流暢度和大一統(tǒng)。這套系統(tǒng)主要是基于微內(nèi)核的全場景分布式OS,可以按照需要進行擴展,由此來實現(xiàn)更為廣泛的系統(tǒng)的安全,它主要用于物聯(lián)網(wǎng),它的主要特點是很低的時延。HarmonyOS
    發(fā)表于 11-26 15:26

    [文章] HarmonyOS學(xué)習(xí)之一:鴻蒙HarmonyOS系統(tǒng)介紹

    華為的鴻蒙系統(tǒng)優(yōu)點是流暢度和大一統(tǒng)。這套系統(tǒng)主要是基于微內(nèi)核的全場景分布式OS,可以按照需要進行擴展,由此來實現(xiàn)更為廣泛的系統(tǒng)的安全,它主要用于物聯(lián)網(wǎng),它的主要特點是很低的時延。HarmonyOS
    發(fā)表于 12-02 16:57

    【有獎討論】鴻蒙操作系統(tǒng)及華為全場景新品發(fā)布會

    新品發(fā)布會這場直播會為大家揭示什么呢?首批搭載鴻蒙手機上線?鴻蒙場景新品類發(fā)布!平板?智慧屏?全屋智能?智能座艙、車機?各位開發(fā)者沒有不愛電子產(chǎn)品的吧?大家希望這次的華為全
    發(fā)表于 05-28 19:07

    鴻蒙應(yīng)用開發(fā)入門資料合集

    開發(fā)難度!贊!2、鴻蒙應(yīng)用開發(fā)入門資料二:開發(fā)環(huán)境搭建下載HarmonyOS SDK DevEco Studio提供SDK Manager統(tǒng)一管理
    發(fā)表于 03-22 11:23

    鴻蒙開源全場景應(yīng)用開發(fā)資料匯總

    1、鴻蒙開源全場景應(yīng)用開發(fā)——視頻編解碼面對鴻蒙這一全新的生態(tài),廣大消費者在積極嘗鮮的同時,家中不可避免會出現(xiàn)安卓設(shè)備和鴻蒙設(shè)備并存的現(xiàn)象,
    發(fā)表于 03-23 10:09

    【學(xué)習(xí)打卡】----鴻蒙系統(tǒng)開發(fā)過程中的心得體會

    的設(shè)計模式,帶來的就是一種顛覆式的用戶體驗。而其底層基礎(chǔ)就在于特有的分布式任務(wù)調(diào)度、分布式數(shù)據(jù)管理等能力,有興趣的朋友可以關(guān)注一下。3、鴻蒙方便產(chǎn)品生態(tài)的建設(shè)一次開發(fā)多端部署,體現(xiàn)了
    發(fā)表于 07-03 18:07

    潤和軟件鴻蒙場景開發(fā)與教學(xué)創(chuàng)新解決方案賦能高校ICT人才培養(yǎng)

    、智慧出行、運動健康五大場景下的創(chuàng)新體驗,基于新的HarmonyOS開發(fā)技術(shù)給開發(fā)者構(gòu)筑更加高效便捷的開發(fā)平臺,并呈現(xiàn)了豐富的開發(fā)者活動。攜
    發(fā)表于 11-09 10:22

    鴻蒙 OS 應(yīng)用開發(fā)初體驗

    什么是 HarmonyOS? HarmonyOS(鴻蒙操作系統(tǒng))是華為公司開發(fā)的一款基于微內(nèi)核的分布式操作系統(tǒng)。它是一個面向物聯(lián)網(wǎng)(IoT)時代的全場景操作系統(tǒng),旨在為各種類型的設(shè)備提供統(tǒng)一
    發(fā)表于 11-02 19:38

    鴻蒙OS 分布式任務(wù)調(diào)度

    鴻蒙OS 分布式任務(wù)調(diào)度概述 在 HarmonyO S中,分布式任務(wù)調(diào)度平臺對搭載 HarmonyOS 的多設(shè)備構(gòu)筑的“超級虛擬終端”提供統(tǒng)一的組件管理能力,為應(yīng)用定義統(tǒng)一的能力基線、
    的頭像 發(fā)表于 01-29 16:50 ?386次閱讀

    鴻蒙開發(fā)任務(wù)Mission)與啟動模式

    如前文所述,一個UIAbility實例對應(yīng)一個任務(wù)。UIAbility實例個數(shù)與UIAbility配置的啟動模式有關(guān)。在FA模型下,通過config.json配置文件中的“l(fā)aunchType”屬性
    的頭像 發(fā)表于 06-14 11:31 ?294次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>開發(fā)</b>:<b class='flag-5'>任務(wù)</b>(<b class='flag-5'>Mission</b>)與啟動模式