首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

鸿蒙HarmonyOS实战-Stage模型(应用上下文Context)

  • 25-02-22 03:40
  • 2588
  • 11237
blog.csdn.net

前言

应用上下文(Context)是应用程序的全局信息的接口。它是一个抽象类,提供了访问应用程序环境的方法和资源的方法。应用上下文可以用于获取应用程序的资源、启动Activity、发送广播等。每个应用程序都有一个应用上下文对象,它在整个应用程序的生命周期内都是唯一的。通过应用上下文,我们可以获得应用程序的全局状态和信息,以及访问应用程序的资源和功能。

一、应用上下文Context

1.概述

?1.1 基本概念

在HarmonyOS中,Stage模型是一种应用程序的结构模型,它涵盖了应用程序的整个生命周期。而应用上下文Context则是在Stage模型中,表示应用程序的执行环境。

Context提供了访问应用程序资源和服务的接口。它包含了应用程序的运行状态和环境信息,如应用程序的包名、进程ID、用户ID等。通过Context,应用程序可以获取应用程序的资源,如布局、字符串、动画等,也可以调用系统提供的服务,如获取位置信息、访问传感器等。

此外,Context还提供了一些方法用于启动Activity、Service、BroadcastReceiver等组件,并且可以发送和接收Intent,实现不同组件之间的通信。Context还能够管理应用程序的生命周期,比如销毁应用程序、保存和恢复数据等。

上下文类提供的基础信息提供的基本方法
基类ContextresourceManager、applicationInfo、dir、area等createBundleContext()、getApplicationContext()等
ApplicationContextresourceManager、applicationInfo、dir、area等createBundleContext()、getApplicationContext()等
AbilityStageContextresourceManager、applicationInfo、dir、area等createBundleContext()、getApplicationContext()等
UIAbilityContextresourceManager、applicationInfo、dir、area等createBundleContext()、getApplicationContext()等
ExtensionContextresourceManager、applicationInfo、dir、area等createBundleContext()、getApplicationContext()等
ServiceExtensionContextresourceManager、applicationInfo、dir、area等createBundleContext()、getApplicationContext()等

在这里插入图片描述

?1.2 获取方式

在这里插入图片描述

☀️1.2.1 UIAbilityContext

提供操作Ability、获取Ability的配置信息、应用向用户申请授权等能力。

  1. import UIAbility from '@ohos.app.ability.UIAbility';
  2. export default class EntryAbility extends UIAbility {
  3. onCreate(want, launchParam) {
  4. let uiAbilityContext = this.context;
  5. // ...
  6. }
  7. }

在这里插入图片描述

☀️1.2.2 AbilityStageContext

和基类Context相比,额外提供HapModuleInfo、Configuration等信息

  1. import AbilityStage from "@ohos.app.ability.AbilityStage";
  2. export default class MyAbilityStage extends AbilityStage {
  3. onCreate() {
  4. let abilityStageContext = this.context;
  5. // ...
  6. }
  7. }
☀️1.2.3 ApplicationContext

ApplicationContext在基类Context的基础上提供了订阅应用内Ability的生命周期的变化、订阅系统内存变化和订阅应用内系统环境的变化的能力,在UIAbility、ExtensionAbility、AbilityStage中均可以获取。

  1. import UIAbility from '@ohos.app.ability.UIAbility';
  2. export default class EntryAbility extends UIAbility {
  3. onCreate(want, launchParam) {
  4. let applicationContext = this.context.getApplicationContext();
  5. // ...
  6. }
  7. }

2.Context的典型使用场景

?2.1 获取应用文件路径

☀️2.1.1 ApplicationContext

在这里插入图片描述

☀️2.1.2 其他Context

在这里插入图片描述

☀️2.1.3 案例
  1. import UIAbility from '@ohos.app.ability.UIAbility';
  2. export default class EntryAbility extends UIAbility {
  3. onCreate(want, launchParam) {
  4. let cacheDir = this.context.cacheDir;
  5. let tempDir = this.context.tempDir;
  6. let filesDir = this.context.filesDir;
  7. let databaseDir = this.context.databaseDir;
  8. let bundleCodeDir = this.context.bundleCodeDir;
  9. let distributedFilesDir = this.context.distributedFilesDir;
  10. let preferencesDir = this.context.preferencesDir;
  11. // ...
  12. }
  13. }

在这里插入图片描述

?2.2 获取和修改加密分区

加密等级说明
AreaMode.EL1设备级加密区,设备开机后可访问的数据区。
AreaMode.EL2用户级加密区,设备开机,首次输入密码后才能够访问的数据区。
  1. import UIAbility from '@ohos.app.ability.UIAbility';
  2. export default class EntryAbility extends UIAbility {
  3. onCreate(want, launchParam) {
  4. // 存储普通信息前,切换到EL1设备级加密
  5. if (this.context.area === 1) { // 获取area
  6. this.context.area = 0; // 修改area
  7. }
  8. // 存储普通信息
  9. // 存储敏感信息前,切换到EL2用户级加密
  10. if (this.context.area === 0) { // 获取area
  11. this.context.area = 1; // 修改area
  12. }
  13. // 存储敏感信息
  14. }
  15. }

在这里插入图片描述

?2.3 创建其他应用或其他Module的Context

在HarmonyOS中,createModuleContext是一个函数,用于创建模块上下文(ModuleContext)对象。模块上下文用于管理模块的生命周期,并提供模块间通信的机制。

使用createModuleContext函数,可以在模块的入口处创建一个模块上下文对象,并将其传递给模块的其他组件。通过模块上下文对象,可以获取到模块的配置信息、上下文等相关的资源。

  1. import UIAbility from '@ohos.app.ability.UIAbility';
  2. export default class EntryAbility extends UIAbility {
  3. onCreate(want, launchParam) {
  4. let moduleName2 = "module1";
  5. let context2 = this.context.createModuleContext(moduleName2);
  6. // ...
  7. }
  8. }

?2.4 订阅进程内Ability生命周期变化

  1. import UIAbility from '@ohos.app.ability.UIAbility';
  2. import Window from '@ohos.window';
  3. const TAG: string = "[Example].[Entry].[EntryAbility]";
  4. export default class EntryAbility extends UIAbility {
  5. lifecycleId: number;
  6. onCreate(want, launchParam) {
  7. let abilityLifecycleCallback = {
  8. onAbilityCreate(ability) {
  9. console.info(TAG, "onAbilityCreate ability:" + JSON.stringify(ability));
  10. },
  11. onWindowStageCreate(ability, windowStage) {
  12. console.info(TAG, "onWindowStageCreate ability:" + JSON.stringify(ability));
  13. console.info(TAG, "onWindowStageCreate windowStage:" + JSON.stringify(windowStage));
  14. },
  15. onWindowStageActive(ability, windowStage) {
  16. console.info(TAG, "onWindowStageActive ability:" + JSON.stringify(ability));
  17. console.info(TAG, "onWindowStageActive windowStage:" + JSON.stringify(windowStage));
  18. },
  19. onWindowStageInactive(ability, windowStage) {
  20. console.info(TAG, "onWindowStageInactive ability:" + JSON.stringify(ability));
  21. console.info(TAG, "onWindowStageInactive windowStage:" + JSON.stringify(windowStage));
  22. },
  23. onWindowStageDestroy(ability, windowStage) {
  24. console.info(TAG, "onWindowStageDestroy ability:" + JSON.stringify(ability));
  25. console.info(TAG, "onWindowStageDestroy windowStage:" + JSON.stringify(windowStage));
  26. },
  27. onAbilityDestroy(ability) {
  28. console.info(TAG, "onAbilityDestroy ability:" + JSON.stringify(ability));
  29. },
  30. onAbilityForeground(ability) {
  31. console.info(TAG, "onAbilityForeground ability:" + JSON.stringify(ability));
  32. },
  33. onAbilityBackground(ability) {
  34. console.info(TAG, "onAbilityBackground ability:" + JSON.stringify(ability));
  35. },
  36. onAbilityContinue(ability) {
  37. console.info(TAG, "onAbilityContinue ability:" + JSON.stringify(ability));
  38. }
  39. }
  40. // 1. 通过context属性获取applicationContext
  41. let applicationContext = this.context.getApplicationContext();
  42. // 2. 通过applicationContext注册监听应用内生命周期
  43. this.lifecycleId = applicationContext.on("abilityLifecycle", abilityLifecycleCallback);
  44. console.info(TAG, "register callback number: " + JSON.stringify(this.lifecycleId));
  45. }
  46. onDestroy() {
  47. let applicationContext = this.context.getApplicationContext();
  48. applicationContext.off("abilityLifecycle", this.lifecycleId, (error, data) => {
  49. console.info(TAG, "unregister callback success, err: " + JSON.stringify(error));
  50. });
  51. }
  52. }

 ?写在最后

  • 如果你觉得这篇内容对你还蛮有帮助,我想邀请你帮我三个小忙:
  • 点赞,转发,有你们的 『点赞和评论』,才是我创造的动力。
  • 关注小编,同时可以期待后续文章ing?,不定期分享原创知识。
  • 想要获取更多完整鸿蒙最新VIP学习资料,请点击→全套鸿蒙HarmonyOS学习资料
  • 或者关注小编后私信回复【666】也可获取资料哦~~

最新鸿蒙Next全套学习资料请扫码
微信名片
注:本文转载自blog.csdn.net的蜀道山QAQ的文章"https://blog.csdn.net/shudaoshanQAQ/article/details/135480154"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2025 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top