任務(Mission)管理場景介紹
任務(Mission)管理相關的基本概念如下:
- AbilityRecord:系統服務側管理一個UIAbility實例的最小單元,對應一個應用側的UIAbility組件實例。系統服務側管理UIAbility實例數量上限為512個。
- MissionRecord:任務管理的最小單元。一個MissionRecord中僅有一個AbilityRecord,即一個UIAbility組件實例對應一個單獨的任務。
- MissionList:一個從桌面開始啟動的任務列表,記錄了任務之間的啟動關系,下一個任務由上一個任務啟動,最底部的任務由桌面啟動,這里稱之為任務鏈。
- MissionListManager:系統任務管理模塊,內部維護了當前所有的任務鏈,與最近任務列表保持一致。
- 開發前請熟悉鴻蒙開發指導文檔 :[
gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md
]
圖1 任務管理示意圖
任務的管理由系統應用(如桌面應用)負責,三方應用無法管理任務。用戶通過最近任務列表進行任務的相關交互。當創建任務后,用戶可以對最近任務列表進行如下操作:
- 刪除一個指定的任務。
- 加鎖或解鎖一個指定的任務(加鎖后的任務在清理所有任務時不會被清理)。
- 清理最近任務列表中的所有任務。
- 將一個指定的任務切換到前臺。
一個UIAbility實例對應一個單獨的任務,因此應用調用[startAbility()
]方法啟動一個UIAbility時,就是創建了一個任務。
- 桌面應用調用[missionManager]的接口管理任務,需要申請
ohos.permission.MANAGE_MISSIONS
權限,配置方式請參見[申請應用權限]。 - 利用missionManager進行任務管理(監聽任務變化、獲取任務信息、獲取任務快照、清理任務、任務加鎖/解鎖等)。
import { missionManager } from '@kit.AbilityKit';
import { BusinessError } from '@kit.BasicServicesKit';
import { image } from '@kit.ImageKit';
import { promptAction } from '@kit.ArkUI';
import { hilog } from '@kit.PerformanceAnalysisKit';
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');
})
審核編輯 黃宇
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
框架
+關注
關注
0文章
403瀏覽量
17475 -
程序
+關注
關注
117文章
3785瀏覽量
81004 -
Kit
+關注
關注
0文章
26瀏覽量
16475 -
鴻蒙
+關注
關注
57文章
2339瀏覽量
42805
發布評論請先 登錄
相關推薦
鴻蒙開發接口Ability框架:【@ohos.application.Ability (Ability)】
Ability模塊提供對Ability生命周期、上下文環境等調用管理的能力,包括Ability創建、銷毀、轉儲客戶端信息等。
鴻蒙Ability Kit(程序框架服務)【ServiceExtensionAbility】
[ServiceExtensionAbility]是SERVICE類型的ExtensionAbility組件,提供后臺服務能力,其內部持有了一個[ServiceExtensionContext],通過[ServiceExtensionContext]提供了豐富的接口供外部使用。
鴻蒙Ability Kit(程序框架服務)【UIExtensionAbility】
[UIExtensionAbility]是UI類型的ExtensionAbility組件,需要與[UIExtensionComponent]一起配合使用,開發者可以在UIAbility的頁面中通過
鴻蒙Ability開發-Stage模型下Ability的創建和使用
函數
HiLog日志系統可以讓應用按照指定類型、指定級別、指定格式字符串打印日志內容,幫助開發者了解應用/服務的運行狀態,更好地調試程序。 HiLog提供了debug、info、warn、error以及fatal
發表于 01-08 15:34
HarmonyOS NEXT應用元服務開發Intents Kit(意圖框架服務)事件推薦接入方案
,具體操作步驟見應用開發準備,完成意圖注冊應用/元服務發布。應用/元服務中需包含意圖注冊聲明文件。
在AppGallery Connect上架后,通過華為開發者聯盟>
發表于 11-14 15:26
HarmonyOS NEXT應用元服務開發Intents Kit(意圖框架服務)綜述
一、綜述
Intents Kit(意圖框架服務)是HarmonyOS級的意圖標準體系 ,意圖連接了應用/元服務內的業務功能。
意圖框架能幫
發表于 11-28 10:43
跟阿斌一起學鴻蒙(2): Ability vs App?
在進一步實踐之前,需要先弄明白一個概念:Ability。不知道你有沒有注意到,使用鴻蒙開發工具DevEco Studio創建項目時,我們選擇創建的是一個個Ability。這是為什么呢?
發表于 11-30 20:56
跟阿斌一起學鴻蒙(2): Ability vs App?
在進一步實踐之前,需要先弄明白一個概念:Ability。不知道你有沒有注意到,使用鴻蒙開發工具DevEco Studio創建項目時,我們選擇創建的是一個個Ability。這是為什么呢?
發表于 12-02 16:55
鴻蒙Ability Kit(程序框架服務)【Ability與ServiceExtensionAbility通信】
本示例展示通過[IDL的方式]和?[@ohos.rpc]?等接口實現了Ability與ServiceExtensionAbility之間的通信。
鴻蒙Ability Kit(程序框架服務)【應用啟動框架AppStartup】
`AppStartup`提供了一種更加簡單高效的初始化組件的方式,支持異步初始化組件加速應用的啟動時間。使用啟動框架應用開發者只需要分別為待初始化的組件實現`AppStartup`提供
評論