当前位置: 首页 > article >正文

理解鸿蒙app 开发中的 context

是什么

Context是应用中对象的上下文,其提供了应用的一些基础信息,例如resourceManager(资源管理)、applicationInfo(当前应用信息)、dir(应用文件路径)、area(文件分区)等,以及应用的一些基本方法,例如createBundleContext()、getApplicationContext()等。UIAbility组件和各种ExtensionAbility派生类组件都有各自不同的Context类。分别有基类Context、ApplicationContext、AbilityStageContext、UIAbilityContext、ExtensionContext、ServiceExtensionContext等Context。(应用上下文(Context)是应用程序的全局信息的接口。它是一个抽象类,提供了访问应用程序环境的方法和资源的方法      总而言之,Context提供了访问应用程序资源和服务的接口。

  • 各类Context的继承关系

各类Context的持有关系 

如何获取 context 

在具体的页面中获取  context    就使用  getcontext(this)

如果需要在页面中获得当前Ability的Context,可调用getContext接口获取当前页面关联的UIAbilityContext或ExtensionContext。

//pages/Index.ets
@Entry
@Component
struct Index {
  @State message: string = 'Hello World'

  build() {
    Row() {
      Column() {
        Text(this.message)
          .fontSize(50)
          .fontWeight(FontWeight.Bold)
          .onClick(() => {
            // 建议使用this.getUIContext().getHostContext()
            let context : Context = getContext(this) as Context
            console.info("CacheDir:" + context.cacheDir)
          })
      }
      .width('100%')
    }
    .height('100%')
  }
}

 

说明:如果需要在页面中获得当前Ability的Context,可调用getContext接口获取当前页面关联UIAbilityContext 

getContext传入this和不传入有什么区别

getContext参数及类型:getContext(component?: Object):Context。

Context传入参数component的作用是指定一个组件对象,getContext函数会返回这个组件的上下文对象Context。如果不传入参数,则默认返回当前组件的上下文对象。上下文对象Context包含了组件的状态、属性、方法等信息,可以在组件内部使用。

在某些场景下,可能需要在组件内部调用其他组件的方法或获取其他组件的属性,此时可以通过getContext(this)获取到当前组件的上下文对象,然后使用该上下文对象调用其他组件的方法或获取其他组件的属性

获取UIAbility的上下文信息

UIAbility类拥有自身的上下文信息,该信息为UIAbilityContext类的实例,UIAbilityContext类拥有abilityInfo、currentHapModuleInfo等属性。通过UIAbilityContext可以获取UIAbility的相关配置信息,如包代码路径、Bundle名称、Ability名称和应用程序需要的环境状态等属性信息,以及可以获取操作UIAbility实例的方法(如startAbility()、connectServiceExtensionAbility()、terminateSelf()等)。

如果需要在页面中获得当前Ability的Context,可调用getContext接口获取当前页面关联的UIAbilityContext或ExtensionContext。

  • UIAbility中可以通过this.context获取UIAbility实例的上下文信息。

  • import { UIAbility, AbilityConstant, Want } from '@kit.AbilityKit';
    
    export default class EntryAbility extends UIAbility {
      onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
        // 获取UIAbility实例的上下文
        let context = this.context;
    //将 context   存进去 
    AppStorage.setOrCreate('EntryAbilityContext', this.context);
        // ...
      }
    }

    注意 !!!!在生明的类里面  拿到context  方式  最好使用这种方式  

export class appOptionModel {
//  使用在 entry  里面存储的   EntryAbilityContext   这样才行  
context: common.UIAbilityContext | undefined = AppStorage.get('EntryAbilityContext'); // 获取UIAbilityContext

}

http://www.kler.cn/a/386483.html

相关文章:

  • C# 模拟浏览器自操作(自动化办公)
  • @ComponentScan:Spring Boot中的自动装配大师
  • MySQL数据库:SQL语言入门 【下】(学习笔记)
  • HelloMeme 上手即用教程
  • 区块链技术在慈善捐赠中的应用
  • 3.5【数据库系统】ER图
  • Centos 网络接口打vlan标签
  • 三周精通FastAPI:38 针对不同的编程语言来生成客户端
  • 『事善能』MySQL基础 — 2.MySQL 5.7安装(一)
  • 玩的花,云产品也能拼团了!!!
  • typescript 补充
  • Spring Boot技术在导师双选系统中的应用
  • uniapp中使用全局样式文件引入的三种方式
  • 高德地图通过经纬度查找位置和轨迹回放
  • Uboot移植
  • 题解:AtCoder Beginner Contest AT_abc379_d ABC379D Home Garden
  • SpringBoot在线教育系统:数据分析与报告
  • IO同步异步/阻塞非阻塞
  • Flutter中的Extension关键字
  • 桥接 设计模式 软考
  • BIM 地铁站智能可视化应用
  • 简单介绍Nginx服务器的反向代理、负载均衡
  • 小柯剧场“真人秀”:如何玩转情感与竞技的双重游戏?
  • 学习记录:js算法(八十九):电话号码的字母组合
  • # 设置ubuntu为中文后,如何保留用户家目录等文件夹名为英文
  • 基于FE1.1(非FE1.1S)的HUB拓展板子 2024/11/9