经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 移动开发 » 鸿蒙 » 查看文章
鸿蒙HarmonyOS实战-Stage模型(应用上下文Context)
来源:cnblogs  作者:蜀道山QAQ  时间:2024/5/24 10:26:28  对本文有异议

??前言

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

??一、应用上下文Context

??1.概述

??1.1 基本概念

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

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

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

image

image

??1.2 获取方式

image

??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. }

image

??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

image

??2.1.2 其他Context

image

??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. }

image

??2.2 获取和修改加密分区

image

  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. }

image

??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??,不定期分享原创知识。
  • 更多鸿蒙最新技术知识点,请关注作者博客:https://t.doruo.cn/14DjR1rEY

image

原文链接:https://www.cnblogs.com/shudaoshan/p/18209504

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号