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

优惠券直播网站怎么做的seo诊断优化专家

优惠券直播网站怎么做的,seo诊断优化专家,winestore wordpress,html5深圳网站开发上下文为何物 上下文在计算机科学领域是一个广泛存在的概念。是现代操作系统核心抽象概念之一。其本质是环境信息的结构化封装。 有过开发经验的都知道,当我们在一个系统上进行开发的时候,无论是Android,HarmonyOs,Linux 等等&a…

上下文为何物

上下文在计算机科学领域是一个广泛存在的概念。是现代操作系统核心抽象概念之一。其本质是环境信息的结构化封装

有过开发经验的都知道,当我们在一个系统上进行开发的时候,无论是Android,HarmonyOs,Linux 等等,从顶层的全系统,到窗口系统,服务系统等子系统,全部存在一个叫 上下文的 概念。 我们首先了解下这个概念,以及其设计意义,因为这个上下文,应该是很多领域程序工程中,特定问题的通用的解决方案。了解这个一通百通。见到了新的也不怵。

更有意思的是,如果您之后要参与大型开发,也可以搞自己的上下文概念。无非是系统的上下文涉及系统的环境信息,而您的上下文可能涉及的是业务信息。

上下文指的是,某个操作,对象或者模块在运行时所依赖的环境信息集合。例如在桌面系统中,当用户右键点击文件时,上下文菜单会根据文件类型显示不同选项(如 “解压”“编辑”),这里的 “文件类型” 和 “用户操作场景” 就是上下文的一部分。

上下文通常包含以下要素

  • 状态数据:如当前用户身份,系统主题,网络连接状态等。
  • 配置参数:应用程序的个性化参数,或者默认的系统参数。
  • 环境信息:实际运行中的物理环境(设备的类型),和逻辑环境(如当前所在界面,操作权限等)。
  • 关联对象:与当前操作相关的其他对象或者资源等(如打开的文件,选中的文本等)

在实现上, 上下文就是一个横向小模块,或者大模块都可以访问到的,公共信息。这个信息实例数量有限但可以共享。

但是随着工程越来越复杂,上下文会变得越来越臃肿,为了便于维护和拆分,也不得不在实现上实现局部的模块化,例如手机系统中的权限管理,我们调用的时候会是这样

context.getPermissionManager().阿巴阿巴的函数继续调用 
//会发现权限管理被拆了,拆成了子模块,然后由context获取。

我们现在的操作系统没有简单的,上下文很复杂也很正常。我们大致记得住可以通过上下文获取什么做到什么就可以了。遇到了问题有思路,尽量不用上网查。

我们这里以顶层设计的视角,假设您要研发一个手机系统的UI框架,并且选定了实现的模型之后,那么您的上下文应该涵盖什么呢?了解了能力边界,有利于您在业务需求之初,准确的评估实现方式以及研发成本。

在实现方面划分模块分类(下图为思路,与实际有出入)

上述模块需要的功能均可直接通过Context,直接或者间接的来访问。

ArkUI应用上下文-Context

上文中已经对Context有个大致的思想上的了解,接下来看看HarmonyOS实现框架-ArkUI中应用上下文。

这里的Context分类比较多,我们在这里着重看下各大Context的关系。

Context的获取方式

各大context已经被各大组件记录为一个变量,可以直接使用。在使用的时候,自己输入this.contex大致都有。像上图中右边涉及的那些类中,都可以通过this.context来获取。

Context分类

基类Context中记录了一些基础能力,这些能力在任何子类context都得到了继承,并可以使用。

其基础信息如图所示

基础的Context主要提供了,资源管理, 当前应用信息,文件路径管理,文件分区几大能力。子类则在基础之上扩展了其他的使用比较多的能力。

应用文件路径(应用沙箱涉及到的目录)

在这里我们有必要对文件路径进行整理,以便于以后用到了心里大概有个谱。具体参考官方文档:

文档中心

各类context目录相关字段获取值及说明

属性

说明

ApplicationContext 获取的值

AbilityStageContext,UIAbilityContext,ExtensionContext获取值

bundleCodeDir

安装包目录

<路径前缀>/el1/boundle

<路径前缀>/el1/boundle

cacheDir

缓存目录

<路径前缀>/<加密等级>/base/cache

<路径前缀>/<加密等级>/base/haps/<module-name>/cache

filesDir

文件目录

<路径前缀>/<加密等级>/base/files

<路径前缀>/<加密等级>/base/haps/<module-name>/files

preferenceDir

参数配置目录

<路径前缀>/<加密等级>/base/preferences

<路径前缀>/<加密等级>/base/haps/<module-name>/references

tempDir

临时目录

<路径前缀>/<加密等级>/base/temp

<路径前缀>/<加密等级>/base/haps/<module-name>/temp

databaseDir

数据库目录

<路径前缀>/<加密等级>/database

<路径前缀>/<加密等级>/database/<module-name>

distributedFilesDir

分布式文件目录

<路径前缀>/el2/distributedFiles

<路径前缀>/el2/distributedFiles

resourceDir

资源目录

-

<路径前缀>/el1/boundle/<module-name>/resource/resfile

cloudFileDir

云文件目录

<路径前缀>/el2/cloud

<路径前缀>/el2/cloud

代码如下

this.applicationContext = this.context.getApplicationContext();
this.uiAbilityContext = this.context;hilog.debug(0x0000, 'testTag', 'bundleCodeDir applicationContext=%s, uiAbilityContext=%s', this.applicationContext.bundleCodeDir, this.uiAbilityContext?.bundleCodeDir);hilog.debug(0x0000, 'testTag', 'cacheDir applicationContext=%s, uiAbilityContext=%s', this.applicationContext.cacheDir, this.context.cacheDir);hilog.debug(0x0000, 'testTag', 'filesDir applicationContext=%s, uiAbilityContext=%s', this.applicationContext.filesDir, this.context.filesDir);hilog.debug(0x0000, 'testTag', 'preferenceDir applicationContext=%s, uiAbilityContext=%s', this.applicationContext.preferencesDir, this.context.preferencesDir);hilog.debug(0x0000, 'testTag', 'tempDir applicationContext=%s, uiAbilityContext=%s', this.applicationContext.tempDir, this.context.tempDir);hilog.debug(0x0000, 'testTag', 'databaseDir applicationContext=%s, uiAbilityContext=%s', this.applicationContext.databaseDir, this.context.databaseDir);hilog.debug(0x0000, 'testTag', 'distributedFilesDir applicationContext=%s, uiAbilityContext=%s', this.applicationContext.distributedFilesDir, this.context.distributedFilesDir);hilog.debug(0x0000, 'testTag', 'cloudFileDir applicationContext=%s, uiAbilityContext=%s', this.applicationContext.cloudFileDir, this.context.cloudFileDir);// 写数据案例let filesDir = this.uiAbilityContext.filesDir + '/test1.txt'let file = fileIo.openSync(filesDir, fileIo.OpenMode.READ_WRITE | fileIo.OpenMode.CREATE)let writeLength = fileIo.writeSync(file.fd, 'Hello word!')// 读数据案例let arrayBuffer = new ArrayBuffer(1024)let readOption : ReadOptions = {offset : 0,length : arrayBuffer.byteLength}let readLength = fileIo.readSync(file.fd, arrayBuffer, readOption)// 将ArrayBuffer内的内容转换为Bufferlet buf = buffer.from(arrayBuffer, 0, readLength)hilog.debug(0x0000, 'testTag', 'wright file content = %s', buf.toString())fileIo.closeSync(file)

获取其他Module中的context

可以通过调用createModuleContext(context : Context, modueName : string)方法,来获取其他模块的Context。并可以通过这个Context获取到其他模块的资源。

applicationContext.crateModuleContext(this.context, 'entry').then(data:  common.Context) {console.info('crateModuleContext=${JSON.tringify(data)}')}.catch((err : BusinessError) => {console.error('createModuleContext error! code=${err.code}, err msg=${err.message}')})

订阅进程内生命周期变化

let abilityLifecycleCallback: AbilityLifecycleCallback = {// 当UIAbility创建时被调用onAbilityCreate(uiAbility) {hilog.info(DOMAIN_NUMBER, TAG, `onAbilityCreate uiAbility.launchWant: ${JSON.stringify(uiAbility.launchWant)}`);},// 当窗口创建时被调用onWindowStageCreate(uiAbility, windowStage: window.WindowStage) {hilog.info(DOMAIN_NUMBER, TAG, `onWindowStageCreate uiAbility.launchWant: ${JSON.stringify(uiAbility.launchWant)}`);hilog.info(DOMAIN_NUMBER, TAG, `onWindowStageCreate windowStage: ${JSON.stringify(windowStage)}`);},// 当窗口处于活动状态时被调用onWindowStageActive(uiAbility, windowStage: window.WindowStage) {hilog.info(DOMAIN_NUMBER, TAG, `onWindowStageActive uiAbility.launchWant: ${JSON.stringify(uiAbility.launchWant)}`);hilog.info(DOMAIN_NUMBER, TAG, `onWindowStageActive windowStage: ${JSON.stringify(windowStage)}`);},// 当窗口处于非活动状态时被调用onWindowStageInactive(uiAbility, windowStage: window.WindowStage) {hilog.info(DOMAIN_NUMBER, TAG, `onWindowStageInactive uiAbility.launchWant: ${JSON.stringify(uiAbility.launchWant)}`);hilog.info(DOMAIN_NUMBER, TAG, `onWindowStageInactive windowStage: ${JSON.stringify(windowStage)}`);},// 当窗口被销毁时被调用onWindowStageDestroy(uiAbility, windowStage: window.WindowStage) {hilog.info(DOMAIN_NUMBER, TAG, `onWindowStageDestroy uiAbility.launchWant: ${JSON.stringify(uiAbility.launchWant)}`);hilog.info(DOMAIN_NUMBER, TAG, `onWindowStageDestroy windowStage: ${JSON.stringify(windowStage)}`);},// 当UIAbility被销毁时被调用onAbilityDestroy(uiAbility) {hilog.info(DOMAIN_NUMBER, TAG, `onAbilityDestroy uiAbility.launchWant: ${JSON.stringify(uiAbility.launchWant)}`);},// 当UIAbility从后台转到前台时触发回调onAbilityForeground(uiAbility) {hilog.info(DOMAIN_NUMBER, TAG, `onAbilityForeground uiAbility.launchWant: ${JSON.stringify(uiAbility.launchWant)}`);},// 当UIAbility从前台转到后台时触发回调onAbilityBackground(uiAbility) {hilog.info(DOMAIN_NUMBER, TAG, `onAbilityBackground uiAbility.launchWant: ${JSON.stringify(uiAbility.launchWant)}`);},// 当UIAbility迁移时被调用onAbilityContinue(uiAbility) {hilog.info(DOMAIN_NUMBER, TAG, `onAbilityContinue uiAbility.launchWant: ${JSON.stringify(uiAbility.launchWant)}`);}};// 获取应用上下文let applicationContext = this.context.getApplicationContext();try {// 注册应用内生命周期回调this.lifecycleId = applicationContext.on('abilityLifecycle', abilityLifecycleCallback);} catch (err) {let code = (err as BusinessError).code;let message = (err as BusinessError).message;hilog.error(DOMAIN_NUMBER, TAG, `Failed to register applicationContext. Code is ${code}, message is ${message}`);}
http://www.dtcms.com/wzjs/293325.html

相关文章:

  • 自己做网站空间广告联盟平台哪个好
  • 网站中留言板怎么做品牌整合营销
  • 网站开发属于商标哪个类别今日头条最新消息
  • 网站qq访客采集系统_访客qq获取系统源码网站客户qq抓取代码百度搜首页
  • 电脑怎样做幻灯片的网站新产品推广方案范文
  • 南开区网站建设seo排名工具给您好的建议下载官网
  • 网页设计与网站建设大作业seo网络推广哪家专业
  • 网站后台操作seo是什么意思电商
  • 盱眙有做网站开发的吗专业推广图片
  • 企业做网站营销百度移动端点赞排名软件
  • vue网站开发教程企业网站优化价格
  • 网站源码上传安装包知名网络软文推广平台
  • 聊城做网站的如何快速推广
  • wordpress 分享 微信二维码seo公司官网
  • 创建网站企业优化seo设置
  • 专业的网站开发服务百度网站优化公司
  • 政府网站建设比较好的免费关键词排名优化
  • 通讯员队伍建设与网站新闻管理关键词点击工具
  • 电子商务网站开发实训seo查询5118
  • 重庆网站建设的公司哪家好杭州seo网站建设
  • 怎么自己电脑做网站服务器百度网站收录提交
  • 怎么做游戏门户网站seo网站培训优化怎么做
  • 建小程序需要网站吗南京网络营销服务
  • 深圳最近消息东营网站seo
  • wanwangseo关键词优化最多可以添加几个词
  • b2c商城网站模版搜索引擎营销分类
  • 建立中英文网站网络营销的六个特点
  • 3g网站模板搜索引擎调词工具哪个好
  • 建设银行网站地址排名优化关键词公司
  • 真人做爰直播全集播放网站电脑优化