(#打卡不停更#【FFH】"Context上下文"到底是什麼?)
"Context上下文"到底是什麼?
什麼是Context上下文
在我剛開始看到Context上下文的時候覺得比較抽象,隻知道它是用來拉起權限或者擷取應用的一些資訊,但是卻一直不知道它到底是什麼,設計者是怎麼定義的?這篇文章就來簡單聊聊"Context上下文"到底是什麼?
我們先從表層上看,Context翻譯過來字面意思就是上下文,從初高中學國文的知識來看,意思就是文章的語境,背景和環境等等跟文章相聯系的内容。
但是我們将其代入到程式中,其實也可以從國文的角度也可以解釋得通,就是抽象化了一下,Context這個字段在程式中通俗的講就是指執行一個任務所需要的相關資訊,這個任務可以是一個程序,一個線程。而在OpenHarmony和HarmonyOS北向開發中分别為ability與application提供了Context上下文的能力,包括通路ability或application的任務資源、請求和驗證權限等。
在HarmonyOS&OpenHarmony中的Context應用上下文概述
Context是應用中對象的上下文,提供擷取應用程式環境資訊的能力。
OpenHarmony的應用架構分為FA模型和Stage兩種模型(關于兩種模型的差別,可以回頭看我上一篇文章)。對應存在兩套Context機制适配兩種應用架構模型,其中application/BaseContext屬于通用的Context基類,裡面包含一個屬性stageMode,用來區分開發模型是FA還是Stage。
Context會在後續開發擷取系統資訊能力的過程中經常遇到,是以必須對Context上下文含義以及如何使用有一定的了解。
下面來簡單用代碼實作幾個例子,工程建立參考上一章節即可。
代碼實操
接下來先用Context上下文擷取有關目前應用程式的資訊:
import featureAbility from '@ohos.ability.featureAbility'
import bundle from '@ohos.bundle'
onInit(){
let context = featureAbility.getContext();//建立Context執行個體對象
context.getApplicationInfo().then((data) => {
console.info("CHW=====================>getApplicationInfoCallback===================>");
console.info("CHW====>data====>" + JSON.stringify(data))
});
}
将代碼編譯成HAP包然後安裝到開發闆或者手機上,就可以将調試台切換到log視窗,檢視輸出的調試資訊,可以看到第三行輸出的就是我們要有關目前應用程式的資訊。
擷取目前ability的包名:
import featureAbility from '@ohos.ability.featureAbility'
import bundle from '@ohos.bundle'
onInit(){
let context = featureAbility.getContext();//建立Context執行個體對象
context.getBundleName().then((data) => {
console.info("CHW=======================>getBundleNameCallback====================>");
console.info("CHW====>data====>" + JSON.stringify(data));
});
}
粗體擷取此ability的目前顯示方向:
import featureAbility from '@ohos.ability.featureAbility'
onInit(){
let context = featureAbility.getContext();//建立Context執行個體對象
context.getDisplayOrientation().then((data) => {
console.info("CHW=======================>getDisplayOrientationCallback====================>");
console.info("CHW====>data====>" + JSON.stringify(data));
});
}
改變此ability的目前顯示方向為橫屏顯示:
import featureAbility from '@ohos.ability.featureAbility'
import bundle from '@ohos.bundle' //導入Bundle子產品以擷取螢幕顯示方向DisplayOrientation對象
onInit(){
let context = featureAbility.getContext();//建立Context執行個體對象
let orientation=bundle.DisplayOrientation.LANDSCAPE;//設定方向參數為橫屏
context.setDisplayOrientation(orientation).then((data) => {
console.info("CHW=======================>setDisplayOrientationCallback====================>");
console.info("CHW====>data====>" + JSON.stringify(data));
});
}
本文作者:Hagon