广州网站营销seo费用,网站建设的质量区别,韩国化妆品网站模板,海南开发公司Context 是应用中对象的上下文#xff0c;其提供了应用的一些基础信息#xff0c;例如resourceManager#xff08;资源管理#xff09;、applicationInfo#xff08;当前应用信息#xff09;、dir#xff08;应用文件路径#xff09;、area#xff08;文件分区#x…Context 是应用中对象的上下文其提供了应用的一些基础信息例如resourceManager资源管理、applicationInfo当前应用信息、dir应用文件路径、area文件分区等以及应用的一些基本方法例如createBundleContext()、getApplicationContext()等。UIAbility组件和各种ExtensionAbility派生类组件都有各自不同的Context类。分别有基类Context、ApplicationContext、AbilityStageContext、UIAbilityContext、ExtensionContext、ServiceExtensionContext等Context。
各类Context的继承关系 各类Context的持有关系 各类Context的获取方式 获取 UIAbilityContext 。每个UIAbility中都包含了一个Context属性提供操作应用组件、获取应用组件的配置信息等能力。 import UIAbility from ohos.app.ability.UIAbility;import AbilityConstant from ohos.app.ability.AbilityConstant;import Want from ohos.app.ability.Want;export default class EntryAbility extends UIAbility {onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) {let uiAbilityContext this.context;...}}说明 页面中获取UIAbility实例的上下文信息请参见 获取UIAbility的上下文信息 。 - 获取特定场景 ExtensionContext 。以ServiceExtensionContext为例表示后台服务的上下文环境继承自ExtensionContext提供后台服务相关的接口能力。 import ServiceExtensionAbility from ohos.app.ability.ServiceExtensionAbility;import Want from ohos.app.ability.Want;export default class MyService extends ServiceExtensionAbility {onCreate(want: Want) {let serviceExtensionContext this.context;...}}* 获取 AbilityStageContext。Module级别的Context和基类Context相比额外提供HapModuleInfo、Configuration等信息。import AbilityStage from ohos.app.ability.AbilityStage;export default class MyAbilityStage extends AbilityStage {onCreate() {let abilityStageContext this.context;...}}获取ApplicationContext。应用级别的Context。ApplicationContext在基类Context的基础上提供了订阅应用内应用组件的生命周期的变化、订阅系统内存变化和订阅应用内系统环境的变化的能力在UIAbility、ExtensionAbility、AbilityStage中均可以获取。 import UIAbility from ohos.app.ability.UIAbility;import AbilityConstant from ohos.app.ability.AbilityConstant;import Want from ohos.app.ability.Want;export default class EntryAbility extends UIAbility {onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) {let applicationContext this.context.getApplicationContext();...}}获取应用文件路径
基类Context 提供了获取应用文件路径的能力ApplicationContext、AbilityStageContext、UIAbilityContext和ExtensionContext均继承该能力。应用文件路径属于应用沙箱路径。
上述各类Context获取的应用文件路径有所不同。
通过ApplicationContext获取应用级别的应用文件路径此路径是应用全局信息推荐的存放路径这些文件会跟随应用的卸载而删除。
属性路径bundleCodeDir路径前缀/el1/bundlecacheDir路径前缀/加密等级/base/cachefilesDir路径前缀/加密等级/base/filespreferencesDir路径前缀/加密等级/base/preferencestempDir路径前缀/加密等级/base/tempdatabaseDir路径前缀/加密等级/databasedistributedFilesDir路径前缀/el2/distributedFiles
示例代码如下所示。
import UIAbility from ohos.app.ability.UIAbility;
import AbilityConstant from ohos.app.ability.AbilityConstant;
import Want from ohos.app.ability.Want;export default class EntryAbility extends UIAbility {onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) {let applicationContext this.context.getApplicationContext();let cacheDir applicationContext.cacheDir;let tempDir applicationContext.tempDir;let filesDir applicationContext.filesDir;let databaseDir applicationContext.databaseDir;let bundleCodeDir applicationContext.bundleCodeDir;let distributedFilesDir applicationContext.distributedFilesDir;let preferencesDir applicationContext.preferencesDir;...// 获取应用文件路径let filePath tempDir test.txt;console.info(filePath: ${filePath});}
}通过AbilityStageContext、UIAbilityContext、ExtensionContext获取HAP级别的应用文件路径。此路径是HAP相关信息推荐的存放路径这些文件会跟随HAP的卸载而删除但不会影响应用级别路径的文件除非该应用的HAP已全部卸载。
属性路径bundleCodeDir路径前缀/el1/bundlecacheDir路径前缀/加密等级/base/haps//cachefilesDir路径前缀/加密等级/base/haps//filespreferencesDir路径前缀/加密等级/base/haps//preferencestempDir路径前缀/加密等级/base/haps//tempdatabaseDir路径前缀/加密等级/database/distributedFilesDir路径前缀/el2/distributedFiles/
示例代码如下所示。 import UIAbility from ohos.app.ability.UIAbility;import AbilityConstant from ohos.app.ability.AbilityConstant;import Want from ohos.app.ability.Want;export default class EntryAbility extends UIAbility {onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) {let cacheDir this.context.cacheDir;let tempDir this.context.tempDir;let filesDir this.context.filesDir;let databaseDir this.context.databaseDir;let bundleCodeDir this.context.bundleCodeDir;let distributedFilesDir this.context.distributedFilesDir;let preferencesDir this.context.preferencesDir;...// 获取应用文件路径let filePath tempDir test.txt;console.info(filePath: ${filePath});}}获取和修改加密分区
应用文件加密是一种保护数据安全的方法可以使得文件在未经授权访问的情况下得到保护。在不同的场景下应用需要不同程度的文件保护。对于私有文件如闹铃、壁纸等应用需要将这些文件放到设备级加密分区EL1中以保证在用户输入密码前就可以被访问对于更敏感的文件如个人隐私信息等应用需要将这些文件放到更高级别的加密分区EL2中以保证更高的安全性。
在实际应用中开发者需要根据不同场景的需求选择合适的加密分区从而保护应用数据的安全。通过合理使用EL1和EL2加密分区可以有效提高应用数据的安全性。 说明 AreaMode.EL1设备级加密区设备开机后可访问的数据区。AreaMode.EL2用户级加密区设备开机首次输入密码后才能够访问的数据区。
要实现获取和设置当前加密分区可以通过读写Context的area属性来实现。
import UIAbility from ohos.app.ability.UIAbility;
import contextConstant from ohos.app.ability.contextConstant;
import AbilityConstant from ohos.app.ability.AbilityConstant;
import Want from ohos.app.ability.Want;export default class EntryAbility extends UIAbility {onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) {// 存储普通信息前切换到EL1设备级加密if (this.context.area contextConstant.AreaMode.EL2) { // 获取areathis.context.area contextConstant.AreaMode.EL1; // 修改area}// 存储普通信息// 存储敏感信息前切换到EL2用户级加密if (this.context.area contextConstant.AreaMode.EL1) { // 获取areathis.context.area contextConstant.AreaMode.EL2; // 修改area}// 存储敏感信息}
}创建其他应用或其他Module的Context
基类Context提供创建其他应用或其他Module的Context的方法有 createBundleContext(bundleName: string)、createModuleContext(moduleName: string)和createModuleContext(bundleName: string, moduleName: string) 接口创建其他应用或者其他Module的Context从而通过该Context获取相应的资源信息例如获取其他Module的 获取应用文件路径 信息。
调用createBundleContext(bundleName:string)方法创建其他应用的Context信息。 说明 当获取的是其他应用的Context时 - 申请ohos.permission.GET_BUNDLE_INFO_PRIVILEGED权限配置方式请参见配置文件权限声明。 - 接口为系统接口三方应用不支持调用。
例如在桌面上显示的应用信息包括应用名称和应用图标等桌面应用可以通过调用上述的方法获取相应应用的Context信息从而获取到相应的应用名称、图标等资源信息。 import UIAbility from ohos.app.ability.UIAbility;import AbilityConstant from ohos.app.ability.AbilityConstant;import Want from ohos.app.ability.Want;export default class EntryAbility extends UIAbility {onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) {let bundleName2 com.example.application;let context2 this.context.createBundleContext(bundleName2);let label2 context2.applicationInfo.label;...}}调用createModuleContext(bundleName:string, moduleName:string)方法获取指定应用指定Module的上下文信息。获取到指定应用指定Module的Context之后即可获取到相应应用Module的资源信息。 说明 当获取的是其他应用的指定Module的Context时 - 申请ohos.permission.GET_BUNDLE_INFO_PRIVILEGED权限配置方式请参见配置文件权限声明。 - 接口为系统接口三方应用不支持调用。 import UIAbility from ohos.app.ability.UIAbility;import AbilityConstant from ohos.app.ability.AbilityConstant;import Want from ohos.app.ability.Want;export default class EntryAbility extends UIAbility {onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) {let bundleName2 com.example.application;let moduleName2 module1;let context2 this.context.createModuleContext(bundleName2, moduleName2);...}}调用createModuleContext(moduleName:string)方法获取本应用中其他Module的Context。获取到其他Module的Context之后即可获取到相应Module的资源信息。 import UIAbility from ohos.app.ability.UIAbility;import AbilityConstant from ohos.app.ability.AbilityConstant;import Want from ohos.app.ability.Want;export default class EntryAbility extends UIAbility {onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) {let moduleName2 module1;let context2 this.context.createModuleContext(moduleName2);...}}订阅进程内UIAbility生命周期变化
在应用内的DFX统计场景中如需要统计对应页面停留时间和访问频率等信息可以使用订阅进程内UIAbility生命周期变化功能。
通过 ApplicationContext 提供的能力可以订阅进程内UIAbility生命周期变化。当进程内的UIAbility生命周期变化时如创建、可见/不可见、获焦/失焦、销毁等会触发相应的回调函数。每次注册回调函数时都会返回一个监听生命周期的ID此ID会自增1。当超过监听上限数量2^63-1时会返回-1。以UIAbilityContext中的使用为例进行说明。
import UIAbility from ohos.app.ability.UIAbility;
import AbilityConstant from ohos.app.ability.AbilityConstant;
import AbilityLifecycleCallback from ohos.app.ability.AbilityLifecycleCallback;
import Want from ohos.app.ability.Want;
import window from ohos.window;const TAG: string [Example].[Entry].[EntryAbility];export default class EntryAbility extends UIAbility {// 定义生命周期IDlifecycleId: number -1;onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) {// 定义生命周期回调对象let abilityLifecycleCallback: AbilityLifecycleCallback {// 当UIAbility创建时被调用onAbilityCreate(uiAbility) {console.info(TAG, onAbilityCreate uiAbility.launchWant: ${JSON.stringify(uiAbility.launchWant)});},// 当窗口创建时被调用onWindowStageCreate(uiAbility, windowStage: window.WindowStage) {console.info(TAG, onWindowStageCreate uiAbility.launchWant: ${JSON.stringify(uiAbility.launchWant)});console.info(TAG, onWindowStageCreate windowStage: ${JSON.stringify(windowStage)});},// 当窗口处于活动状态时被调用onWindowStageActive(uiAbility, windowStage: window.WindowStage) {console.info(TAG, onWindowStageActive uiAbility.launchWant: ${JSON.stringify(uiAbility.launchWant)});console.info(TAG, onWindowStageActive windowStage: ${JSON.stringify(windowStage)});},// 当窗口处于非活动状态时被调用onWindowStageInactive(uiAbility, windowStage: window.WindowStage) {console.info(TAG, onWindowStageInactive uiAbility.launchWant: ${JSON.stringify(uiAbility.launchWant)});console.info(TAG, onWindowStageInactive windowStage: ${JSON.stringify(windowStage)});},// 当窗口被销毁时被调用onWindowStageDestroy(uiAbility, windowStage: window.WindowStage) {console.info(TAG, onWindowStageDestroy uiAbility.launchWant: ${JSON.stringify(uiAbility.launchWant)});console.info(TAG, onWindowStageDestroy windowStage: ${JSON.stringify(windowStage)});},// 当UIAbility被销毁时被调用onAbilityDestroy(uiAbility) {console.info(TAG, onAbilityDestroy uiAbility.launchWant: ${JSON.stringify(uiAbility.launchWant)});},// 当UIAbility从后台转到前台时触发回调onAbilityForeground(uiAbility) {console.info(TAG, onAbilityForeground uiAbility.launchWant: ${JSON.stringify(uiAbility.launchWant)});},// 当UIAbility从前台转到后台时触发回调onAbilityBackground(uiAbility) {console.info(TAG, onAbilityBackground uiAbility.launchWant: ${JSON.stringify(uiAbility.launchWant)});},// 当UIAbility迁移时被调用onAbilityContinue(uiAbility) {console.info(TAG, onAbilityContinue uiAbility.launchWant: ${JSON.stringify(uiAbility.launchWant)});}}// 获取应用上下文let applicationContext this.context.getApplicationContext();// 注册应用内生命周期回调this.lifecycleId applicationContext.on(abilityLifecycle, abilityLifecycleCallback);console.info(TAG, register callback number: ${this.lifecycleId});}...onDestroy() {// 获取应用上下文let applicationContext this.context.getApplicationContext();// 取消应用内生命周期回调applicationContext.off(abilityLifecycle, this.lifecycleId);}
}为了能让大家更好的学习鸿蒙HarmonyOS NEXT开发技术这边特意整理了《鸿蒙开发学习手册》共计890页希望对大家有所帮助https://qr21.cn/FV7h05
《鸿蒙开发学习手册》
如何快速入门https://qr21.cn/FV7h05
基本概念构建第一个ArkTS应用…… 开发基础知识https://qr21.cn/FV7h05
应用基础知识配置文件应用数据管理应用安全管理应用隐私保护三方应用调用管控机制资源分类与访问学习ArkTS语言…… 基于ArkTS 开发https://qr21.cn/FV7h05
Ability开发UI开发公共事件与通知窗口管理媒体安全网络与链接电话服务数据管理后台任务(Background Task)管理设备管理设备使用信息统计DFX国际化开发折叠屏系列…… 鸿蒙开发面试真题含参考答案https://qr18.cn/F781PH 鸿蒙开发面试大盘集篇共计319页https://qr18.cn/F781PH
1.项目开发必备面试题 2.性能优化方向 3.架构方向 4.鸿蒙开发系统底层方向 5.鸿蒙音视频开发方向 6.鸿蒙车载开发方向 7.鸿蒙南向开发方向