任務(Mission)管理場景介紹
任務(Mission)管理相關的基本概念如下:
- AbilityRecord:系統服務側管理一個UIAbility實例的最小單元,對應一個應用側的UIAbility組件實例。系統服務側管理UIAbility實例數量上限為512個。
- MissionRecord:任務管理的最小單元。一個MissionRecord中僅有一個AbilityRecord,即一個UIAbility組件實例對應一個單獨的任務。
- MissionList:一個從桌面開始啟動的任務列表,記錄了任務之間的啟動關系,下一個任務由上一個任務啟動,最底部的任務由桌面啟動,這里稱之為任務鏈。
- MissionListManager:系統任務管理模塊,內部維護了當前所有的任務鏈,與最近任務列表保持一致。
圖1 任務管理示意圖
任務的管理由系統應用(如桌面應用)負責,三方應用無法管理任務。用戶通過最近任務列表進行任務的相關交互。當創建任務后,用戶可以對最近任務列表進行如下操作:
- 刪除一個指定的任務。
- 加鎖或解鎖一個指定的任務(加鎖后的任務在清理所有任務時不會被清理)。
- 清理最近任務列表中的所有任務。
- 將一個指定的任務切換到前臺。
一個UIAbility實例對應一個單獨的任務,因此應用調用[startAbility()
]方法啟動一個UIAbility時,就是創建了一個任務。
桌面應用調用[missionManager]的接口管理任務,需要申請
ohos.permission.MANAGE_MISSIONS
權限,配置方式請參見[申請應用權限]。利用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文章
2362瀏覽量
42883
發布評論請先 登錄
相關推薦
華為鴻蒙—時代的開啟者!
`在開始之前先給大家介紹下華為鴻蒙吧,鴻蒙微內核是基于微內核的全場景分布式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 的多設備構筑的“超級虛擬終端”提供統一的組件管理能力,為應用定義統一的能力基線、
鴻蒙開發:任務(Mission)與啟動模式
如前文所述,一個UIAbility實例對應一個任務。UIAbility實例個數與UIAbility配置的啟動模式有關。在FA模型下,通過config.json配置文件中的“launchType”屬性
評論