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

东莞设计企业网站的有哪些互联网营销师培训费用是多少

东莞设计企业网站的有哪些,互联网营销师培训费用是多少,广州专业网站制作设计,重庆行业平台上下文为何物 上下文在计算机科学领域是一个广泛存在的概念。是现代操作系统核心抽象概念之一。其本质是环境信息的结构化封装。 有过开发经验的都知道,当我们在一个系统上进行开发的时候,无论是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/246260.html

相关文章:

  • 做理财的网站seort什么意思
  • 佛山美容网站建设aso优化工具
  • 扁平化网站 psd为什么sem的工资都不高
  • 论坛网站建设网站营销策划
  • 做网站用啥软件电商自学网
  • 始兴县建设局网站seo外链优化方法
  • 重庆品牌餐饮加盟网站建设天津关键词优化网站
  • 生日礼物自己做网站宁德seo推广
  • 国外设计网站武汉it培训机构排名前十
  • 网站设计公司 武汉北京网络营销推广公司
  • 网站开发常用的流程谷歌外贸网站推广
  • 3g门户网站官网网络推广怎么收费
  • 专门做旅游的视频网站有哪些seo引擎优化教程
  • 鹤壁做网站公司泰州百度seo公司
  • 做公司网站和设计logo怎么快速优化网站排名
  • 曹县网站建设公司2345网址导航浏览器下载
  • 余姚网站建设找哪家线上推广有哪些平台效果好
  • 网站建设收费网络营销最火的案例
  • 专业做外贸网站建设厦门seo收费
  • 平顶山网站关键词优化济宁seo推广
  • 2017网站建设价目表网络服务器
  • 宁波建网站费用百度关键词排名快速排名
  • 温州做网站seo网站推广文章
  • 建设一个网站的流程图潮州网站建设
  • 服装设计网站哪个好近期国际热点大事件
  • 连云港 网站 建设产品推广网站哪个好
  • 网站宣传推广谷歌官网下载app
  • 太原建站模板大全真正免费的网站建站平台推荐
  • 夜间正能量不良网站网站优化 seo和sem
  • 2核4g 1m做网站乔拓云建站平台