此文章內(nèi)容兼容API12推掸,使用harmony next應(yīng)用開發(fā)
簡介
context桶蝎,即上下文,
- 訪問應(yīng)用資源谅畅,如文件登渣、字符串、圖片毡泻、布局等胜茧。
- 啟動 Ability、Service仇味、Data 等組件呻顽。
- 獲取系統(tǒng)服務(wù)雹顺,如 Preferences、SensorManager 等芬位。
- 訂閱生命周期等
1无拗,各種context
繼承關(guān)系:
持有關(guān)系:
2,獲取方式不同
- UIAbilityContext 在 UIAbility 的 onCreate 時即可獲让恋铩英染;提供UIAbility的相關(guān)配置信息以及操作UIAbility和ServiceExtensionAbility的方法,如啟動UIAbility被饿,停止當(dāng)前UIAbilityContext所屬的UIAbility四康,啟動、停止狭握、連接闪金、斷開連接ServiceExtensionAbility等
export default class EntryAbility extends UIAbility {
onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
let uiAbilityContext = this.context;
}
}
- 取特定場景ExtensionContext,如 ServiceExtensionContext论颅,同樣在 onCreate 時獲取
- 獲取module級別的AbilityStageContext哎垦,同樣onCreate 獲取,比基類context多了HapModuleInfo恃疯、Configuration等信息
- 獲取應(yīng)用級別的ApplicationContext 漏设,同樣onCreate 獲取,比基類context多了訂閱應(yīng)用內(nèi)應(yīng)用組件的生命周期的變化今妄、訂閱系統(tǒng)內(nèi)存變化郑口、訂閱應(yīng)用內(nèi)系統(tǒng)環(huán)境變化、設(shè)置應(yīng)用語言盾鳞、設(shè)置應(yīng)用顏色模式犬性、權(quán)限等能立
2, 不同context有不同的屬性和方法腾仅,并不完全一致
解答
1乒裆,子線程Worker中如何獲取 context
aw : 將主線程的context 以postMessage參數(shù)的方式傳輸?shù)絯ork線程中
2,hsp 通過 getContext(this) 獲取資源會報錯推励; 因?yàn)槠鋬H包含靜態(tài)資源鹤耍,本身沒有上下文概念
aw: 先通過getContext()獲取當(dāng)前上下文,再通過createModuleContext()獲取HSP模塊的上下文吹艇,再獲取HSP模塊的resourceManager惰蜜,然后再調(diào)用resourceManager的接口獲取資源昂拂。
getContext()
.createModuleContext('library') //創(chuàng)建此包的上下文
.resourceManager
.getStringValue(ResManager.getDesc())
.then(value => {
console.log('getStringValue is ' + value);
this.message = 'getStringValue is ' + value;
})
.catch((err: BusinessError) => {
console.error('getStringValue promise error is ' + err);
});
3受神,har 和 hsp 包如何獲得context
aw: 使用 createModuleContext(context: Context, moduleName: string) 獲得本包的上下文
4,getContext(component?: Object):Context格侯, 參數(shù)傳與不傳的區(qū)別
aw:入?yún)⑹墙M件鼻听,傳入組件則返回此組件的上下文财著; 若不傳,則返回當(dāng)前組件的上下文
上下文對象Context包含了組件的狀態(tài)撑碴、屬性撑教、方法等信息
5,頁面/組件中醉拓,如何獲得當(dāng)前Ability的Context伟姐,即 UIAbilityContext
aw: 可調(diào)用getContext接口獲取當(dāng)前頁面關(guān)聯(lián)的UIAbilityContext
6,工具類等非組件page中亿卤,如何獲取context
aw: 無法獲取愤兵,可使用 APPStorage 進(jìn)行存取