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

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

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

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

jf_46214456 ? 來(lái)源:jf_46214456 ? 作者:jf_46214456 ? 2024-06-13 14:37 ? 次閱讀

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

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

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

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

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

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

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

  2. 利用missionManager進(jìn)行任務(wù)管理(監(jiān)聽(tīng)任務(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ù)銷(xiāo)毀
      onMissionDestroyed: (mission: number) = > {
        hilog.info(DOMAIN_NUMBER, TAG, '--------onMissionDestroyed-------');
      },
      // 任務(wù)快照變化
      onMissionSnapshotChanged: (mission: number) = > {
        hilog.info(DOMAIN_NUMBER, TAG, '--------onMissionMovedToFront-------');
      },
      // 任務(wù)被移動(dòng)到前臺(tái)
      onMissionMovedToFront: (mission: number) = > {
        hilog.info(DOMAIN_NUMBER, TAG, '--------onMissionClosed-------');
      },
      // 任務(wù)圖標(biāo)變化
      onMissionIconUpdated: (mission: number, icon: image.PixelMap) = > {
        hilog.info(DOMAIN_NUMBER, TAG, '--------onMissionIconUpdated-------');
      },
      // 任務(wù)名稱變化
      onMissionLabelUpdated: (mission: number) = > {
        hilog.info(DOMAIN_NUMBER, TAG, '--------onMissionLabelUpdated-------');
      },
      // 任務(wù)實(shí)例被關(guān)閉
      onMissionClosed: (mission: number) = > {
        hilog.info(DOMAIN_NUMBER, TAG, '--------onMissionClosed-------');
      }
    };
    
    // 1.注冊(cè)任務(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個(gè)任務(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.獲取單個(gè)任務(wù)的詳細(xì)信息()
    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ù)切到前臺(tái)
    missionManager.moveMissionToFront(this.missionId).then(() = > {
      hilog.info(DOMAIN_NUMBER, TAG, 'moveMissionToFront is called ');
    });
    
    // 8.刪除單個(gè)任務(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.解注冊(cè)任務(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)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 鴻蒙
    +關(guān)注

    關(guān)注

    57

    文章

    2382

    瀏覽量

    42943
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    華為鴻蒙—時(shí)代的開(kāi)啟者!

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

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

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

    華為鴻蒙一時(shí)代的開(kāi)啟者!

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

    鴻蒙OS適用的全場(chǎng)景到底什么意思?

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

    鴻蒙介紹

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

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

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

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

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

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

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

    鴻蒙應(yīng)用開(kāi)發(fā)入門(mén)資料合集

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

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

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

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

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

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

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

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

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

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

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

    鴻蒙開(kāi)發(fā)任務(wù)Mission)與啟動(dòng)模式

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