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

营销型网站维护多少钱做一个网站需要多少费用

营销型网站维护多少钱,做一个网站需要多少费用,雅茂道网站建设,成都大型网站设计公司在 2024 年 7 月 24 日的 Unite Shanghai 2024 团结引擎专场演讲中#xff0c;Unity中国 OpenHarmony 技术负责人刘伟贤对团结引擎导出的 OpenHarmony 工程进行了细节剖析#xff0c;详细讲解 XComponent 如何与引擎结合#xff0c;UI 线程和引擎线程的关联以及 ts/ets 的代…在 2024 年 7 月 24 日的 Unite Shanghai 2024 团结引擎专场演讲中Unity中国 OpenHarmony 技术负责人刘伟贤对团结引擎导出的 OpenHarmony 工程进行了细节剖析详细讲解 XComponent 如何与引擎结合UI 线程和引擎线程的关联以及 ts/ets 的代码如何与引擎功能进行交互。帮助大家在接入 SDK 以及 OpenHarmony 系统能力调用方面有更深入的了解。 刘伟贤大家下午好今天在这里带来的分享是《团结引擎 OpenHarmony 工程剖析》。我是刘伟贤目前是 Unity中国 OpenHarmony 平台和车机平台的技术负责人。今天的内容一共四个部分基本概念介绍、引擎画布-XComponent、引擎线程模型、引擎跨语言交互。 OpenHarmony 是一个全新的操作系统其次这个系统本身在快速发展过程中中间胶水层代码也在频繁变化而且很多开发者对这个胶水层代码很不熟悉。因为原来的 Android 和 iOS 是有一定历史的但是对于 OpenHarmony 来讲是全新的。所以今天希望能通过概念和核心部分的讲解让大家对于胶水层代码有更深入了解从而看到 OpenHarmony 技术平台的一些技术细节。 基本概念 首先大家打开一个工程切换到 OpenHarmony 这个平台当我们在 BuildSettings 里面勾选 Export Project我们就能得到一个 Ability Project是 OpenHarmony 平台的一个原生工程然后使用 Deveco Studio 打开这个 Ability Project我们就能进行调试、构建等常规的操作。同时通过 Export Project 也能窥探到所有引擎适配 OpenHarmony 的胶水代码。 首先我们从一个项目的目录结构来窥探 Ability Project 整体的目录结构是怎么样的。开发态包结构Stage 模型分成 AppScope 跟 entry 这两个比较重要的目录AppScope 是一个应用的全局配置核心是 app.json5去配置包名信息、版本号等。Entry 是一个模块类似于 Android 工程的 module但是里面会存有资源、ets 代码、ArkTS 代码、模块配置、一些配置项还有应用级的配置信息、签名信息会在 build-profile.json5。 上面是一般 OpenHarmony Ability Project 开发包结构但是与引擎相关的目录只有上图这些比如说引擎所有的 so包括要接入的 SDK 都会放到 entry/libs 目录中引擎中所有的胶水代码都在 entry/main/ets 中而胶水代码中还有一个关键的入口 TuanjiePlayerAbility相当于安卓的 activity。还有 UIAbility 对应的 page 文件 TuanjiePlayerAbilityIndex.ets。除了这些以外其他plugins代码也会自动导到这个地方。对于包内的资源会放在 resources/rawfile/Data 中包括 StreamingAssets, boot.config 等。这就是引擎在适配的时候我们怎么样把引擎中的资源放到原生的 Ability Project 里面去。 上面这个图展示了在 OpenHarmony 的工程由开发态视图经过编译以后的包结构视图。可以看出刚才提到的 entry 实际上是一个 module里面有一些 resource 和代码。我们有一个全局的 AppScope中间可以扩展很多不同的 module。但是这里面与 Android 有一个比较大的差异在于它的 module 实际上会编译成一个一个的 HAP就像分成一个一个的小安装包最终由一个 .app 把这些全部包起来。 所以说从刚才怎么把引擎的东西放到项目中可以看出目前引擎所有的东西都放在 entry 的 module 里面意味着目前在 OpenHarmony 很难做到像原来安卓工程那种 uaal (use as a library) 的形式。如果要达到我们应该把它抽象成一个自己的 module大家可以把 module 拷出放到别的 OpenHarmony 原生应用里去集成、开发。我们后续可能会计划改成一个独立的 library 或者 module会在后面的版本迭代掉。 我们有一个非常重要的主入口 TuanjiePlayerAbility它类似于 Android 的 Activity。UIAbility 底下还有一个 WindowStage它们在我们的整个胶水代码里是捆在一起的主要做一些生命周期管理。最后有一个有别于 Android 的地方叫做 ArkUIPage主要做一些布局以及简单代码的实现。所以 UIAbility 组件是一种包含 UI 的应用组件主要用于和用户交互。 在 OpenHarmony 里面 UIAbility 组件是系统调度的基本单元为应用提供绘制界面的窗口。一个应用可以包含一个或多个 UIAbility 组件。例如在支付应用中可以将入口功能和收付款功能分别配置为独立的 UIAbility。每一个 UIAbility 也可以包含不同的 page所以整体在切换上面还是相对比较灵活的。 对于开发者而言可以根据具体场景选择单个还是多个 UIAbility如果开发者希望在任务视图中看到一个任务则建议使用一个 UIAbility多个页面的方式。如果开发者希望在任务视图中看到多个任务或者需要同时开启多个窗口则建议使用多个 UIAbility 开发不同的模块功能。 每个 UIAbility 实例都会与一个 WindowStage 类实例绑定该类起到了应用进程内窗口管理器的作用。它包含一个主窗口。也就是说 UIAbility 实例通过 WindowStage 持有了一个主窗口该主窗口为 ArkUI 提供了绘制区域。 在 TuanjiePlayerAbility.ts 中它整个生命周期就是 UIAbility 和 WindowStage 绑定在一起UIAbility 实例创建完成之后在进入 Foreground 之前系统会创建一个 WindowStage。WindowStage 创建完成后会进入 onWindowStageCreate() 回调可以在该回调中设置 UI 加载、设置 WindowStage 的事件订阅。 适配时在 OnCreate 的时候我们主要是获取了 AbilityContext用来做跨语言调用时需要的上下文。其次我们初始化 TuanjieMainWorker 线程。WindowStage 里面的OnForeground/onBackground对应的就是前后台切换所以不管是OnForeground/onBackground包括 WindowStage 的 Shown/Hidden 都会执行到引擎的 onResume/onPause。在 WindowStage 中的 Active 和 InActive 就是对应引擎的焦点获取 Focus/LostFocus。 TuanjiePlayerAbility 对应 TuanjiePlayerAbilityIndex.ets对应的是基于 ArkUI 的声明范式的一个文件它是方舟开发框架下的一套开发极简、高性能、支持跨设备的 UI 开发框架包含了 ArkTS(eTS) 、布局、组件、交互事件。从上图右侧的 TuanjiePlayer 可以看到整个简单、清晰的结构。 接下来我们详细剖析 TuanjiePlayerAbility 里面对应的 page 中的内容。首先上面是装饰器有自定义组件 TuanjiePlayer有点类似 Android 里面也有一个 UnityPlayer.java 的 component。其次在 TuanjiePlayer component 中包含了一些布局信息内置了 Xcomponent就是我们引擎最后用来绘制的画布要从 Xcomponent 拿到 surface引擎用于绘制。在 Xcomponent 里面还会扩展一些事件方法然后对应一些 log 输出包括属性设置、宽高。 下面还可以看到我们自己定义的 TuanjiePlayer component 整个层级结构是怎么样的一个 Xcomponent盖着 TuanjieWebview再盖着 SlapshScreen再盖着 VideoPlayer这些都像 stack 一样一层一层叠加上面通过状态控制显示还是隐藏。所以这里面就是我们自己定义的一些控件底下是一些属性方法。从整体文件可以看出它的 ArkUI 写法非常舒适可以一目了然地看到整个页面的布局、事件、属性是怎么样的。 TuanjiePlayerAbility.ts/TuanjiePlayerAbilityIndex.ets这里面有两个文件的后缀大家要了解 ts 代表 TypeScriptets 代表 extented TypeScriptArkTS 语言。ArkTS 是 OpenHarmony 的主力应用开发语言。ArkTS 围绕应用开发在 TypeScript 生态基础上做了进一步扩展后缀为 ets它保持了 TS 的基本风格在 TypeScript 的基础上扩展了声明式 UI、状态管理等相应的能力。同时通过规范定义强化开发期静态检查和分析提升程序执行稳定性和性能。TS 是 JavaScript简称 JS的超集eTS 则是 TS 的超集。从 eTS 我们可以看一些特点包括强制使用静态类型、禁止在运行时改变对象布局、限制运算符语义、不支持 Structural typing去掉原本动态语言的一些特性加了一些限制能够达到更好的编译优化从而把整个运行的性能提升上去。 引擎画布 - Xcomponent Xcomponent 是 OpenHarmony 提供的一个非常重要的组件主要用来进行 EGL/OpenGLES 和媒体数据写入并将其显示在 XComponent 组件上。它有 surface/component/texture 类型目前团结引擎使用的是 surface 类型。同时 XComponent 组件可以和其他组件一起进行布局和渲染。我们整个 TuanjiePlayer 中除了 Xomponent 之外还叠加了一些自定义组件在上面。开发者可将相关数据传入 XComponent 单独拥有 NativeWindow 来渲染画面。 Native XComponent 是 XComponent 组件提供在 Native 层的实例可作为 JS 层和 Native 层 XComponent 绑定的桥梁。通过 XComponet 的 libraryname指明 so 名字这时候就会到 C 层可以在 C 层通过 napi 去获取 OH_NativeXComponent然后并且注册事件回调得到最终用来渲染的 NativeWindow。 所以从整体渲染模型来讲我们其实在 XComponent 回调获得 NativeWindow使用 NativeWindow 来创建 EGL/OpenGLES 环境也满足和安卓类似的生产者-消费者模型。从上图可以看出引擎这一层如果是一个相对原生的 OpenHarmony 应用原生组件会走到一个渲染服务中经过 skia 最终进行 GLES/EGL 调用。如果是自绘制的应用基本是经过 Xcomponent 直接调用到 OpenGLES 的这些绘制指令上面去。 引擎线程模型 从整个目录结构、怎么样把引擎所要的东西合进 Ability Project到引擎需要拿到怎么样的画布进行渲染下一步就是引擎在 OpenHarmony 上的线程模型是怎么样的。对于所有的应用来说我们都不希望耗时操作会对我们的 UI 交互造成卡顿在 OpenHarmony 上也一样我们不会把引擎和 UI 放在同一条线程上面。 TuanjiePlayer Ability 起来的时候它有一条 ArkUI 线程即传统意义上的 UI 线程我们通过 threadWorker 创建一条 TuanjieMain 线程放到 C 那边去走引擎的正式启动流程。这条 TuanjieMain 线程才会再去把渲染线程、JobWoker 线程以及脚本中会调用的 C# 线程创建出来。 在这里面ArkUI 线程可以说是 UI 线程主要执行 UI 绘制管理主线程的 ArkTS 引擎实例使多个 UIAbility 组件能够运行在其之上。同时也可以管理其他线程的 ArkTS 引擎实例例如启动和终止 Worker 线程处理应用代码的回调包括事件处理和生命周期管理。 对于 Worker 线程 - TuanjieMain它是引擎的主线程用于执行耗时操作支持线程间通信因为我们有一些 UI 操作要回到主线程 UI 线程执行。但是这里面有一个非常重要的点Worker 的上下文对象和主线程的上下文对象是不同的一定要小心而且 Worker 线程不支持 UI 操作意味着 TuanjieMain 线程不能进行任何 UI 操作必须 post message 回到 UI 线程进行 UI 相关操作。 下面看一下整个引擎在 Worker 线程的初始化。 UIAbility.ts 在 OnCreate的时候会传递 AbilityContext并且初始化 TuanjieMainWorker。TuanjieMainWorker 的初始化调用到 TuanjieMainWorker.getInstance它是一个单例此时会调用到构造方法会去创建一个 threadWorker。threadWorker 整个线程的运行环境就在 TuanjieMainWorkerHandler.ts。所以从这里看到不管是 ArkUI 还是 Worker 线程在 OpenHarmony 都挺特别的都分成两个文件没有合到一起去。 当我们 new 好 Worker thread 的时候TuanjieMainWorkerHandler.ts 文件内所执行的代码已经是在 Worker 线程这时候我们就会通过 tuanjie.nativeSetWorker() 调用 C从而注册 libuv 的回调从而作为引擎 Loop然后再循环。 关于 ArkUI 线程与 TuanjieMain 线程的交互大家一定要注意 ArkUI 线程消息处理是在 threadWorker.onmessageTuanjieMain 线程消息处理要去找到 workerPort.onmessage。如果从 ArkUI 线程发消息到 TuanjieMain 线程需要 threadWorker.postMessage反过来 TuanjieMain 线程到 ArkUI 线程是 workerPort.postMessage。线程之间的交互基本就是通过 postMessage 去处理消息的接收也是通过 onMessage 的回调进行处理。 在 Worker 里面有比较多的注意事项 Worker 创建后需要手动管理生命周期且 TS 里面最多同时运行的 Worker 子线程数量为 8 个 由于不同线程中上下文对象是不同的因此 Worker 线程只能使用线程安全的库 因为线程之间只能通过 postMessage 进行交互序列化传输的数据量大小限制为 16MB 使用 Worker 模块时需要在主线程中注册 onerror 接口否则当 worker 线程出现异常时会发生 jscrash 问题。 引擎跨语言交互 引擎跨语言交互部分首先 OH 使用 Node-API 实现跨语言交互。在 ArkTs/JS 侧只需要 import 一个对应的 so 库后即可调用 C 方法。我们只需要在 TS 代码中 import tuanjie from ‘libtuanjie.so; 然后调用 tuanjie.nativeOnResume()是让引擎从后台回前台的接口。nativeOnResume 就会 call 到 CC 侧的实现则是通过 RegisterModule 把 napi 的 module 丢到 TS并且 module name 叫 tuanjie。里面有一个 register function 叫 JSI_onLoad。 右侧展示所有的这些代码就是我们把 C 接口暴露到 TS 接口的 API我们绝大多数接口都是用 Native 开头的。如果大家在操作 TS 代码的时候想知道哪些会调用到 C 内层去只需要知道 Native 开头的基本都是调到 C 里面去。其中可能会有一些特别的如 Tuanjie.SendMessage是为了和原来的 Unity.SendMessage 保持一致没有把 Native 放在前面。 C 与 TS 是通过 Node-API 进行交互的接下来如果要使用 C# 怎么进行 TS 的交互呢首先 C# 调用 TS 接口我们提供了很多的 OpenHarmony 的 js object, js class 等等 C# 接口这些接口的执行都是在 TuanjieMain 线程里面的。当我们在 C# 中调用我们提供的 OpenHarmony js object 的接口时它是从 C# 的 API 到了 C 内层就会经过 Node-API再到 TS API。 如果从 TS 调用 C# 接口我们通过 import tuanjie from ‘libtuanjie.so 直接调用 tuanjie.TuanjieSendMessage()TS 把信息发送到 C# 端。实际上是在 C 里面导出了 tuanjie.TuanjieSendMessage 的接口到 TS 层从 C 回到 scripting的API再回到 C#。需要注意的一点是目前 C# call TS 目前所有的执行都还在 TuanjieMain 线程里面但是如果是 TS 调用 C# 接口可以在任意线程因为 TuanjieSendMessage 是线程安全的会把来自不同线程的消息先放在消息堆中等引擎每一个 loop 在走的时候才会把消息拿出来进行处理。 以上是我对 OpenHarmony 工程的分析希望大家从今天的分享中可以了解引擎整体目录是什么样的、整个线程之间是怎样的关系特别是在做 C# 和 TS 交互的时候大家一定要注意线程之间交互的区别。 今天的分享就到这里谢谢大家
文章转载自:
http://www.morning.nkjjp.cn.gov.cn.nkjjp.cn
http://www.morning.wdlyt.cn.gov.cn.wdlyt.cn
http://www.morning.wtcd.cn.gov.cn.wtcd.cn
http://www.morning.nllst.cn.gov.cn.nllst.cn
http://www.morning.lwrks.cn.gov.cn.lwrks.cn
http://www.morning.pxsn.cn.gov.cn.pxsn.cn
http://www.morning.rkmhp.cn.gov.cn.rkmhp.cn
http://www.morning.lndongguan.com.gov.cn.lndongguan.com
http://www.morning.rhph.cn.gov.cn.rhph.cn
http://www.morning.tkfnp.cn.gov.cn.tkfnp.cn
http://www.morning.ssqrd.cn.gov.cn.ssqrd.cn
http://www.morning.dbphz.cn.gov.cn.dbphz.cn
http://www.morning.fbjqq.cn.gov.cn.fbjqq.cn
http://www.morning.hhzdj.cn.gov.cn.hhzdj.cn
http://www.morning.wkgyz.cn.gov.cn.wkgyz.cn
http://www.morning.rhsr.cn.gov.cn.rhsr.cn
http://www.morning.dwdjj.cn.gov.cn.dwdjj.cn
http://www.morning.rhwty.cn.gov.cn.rhwty.cn
http://www.morning.hyjpl.cn.gov.cn.hyjpl.cn
http://www.morning.ptqpd.cn.gov.cn.ptqpd.cn
http://www.morning.bnlkc.cn.gov.cn.bnlkc.cn
http://www.morning.kwqwp.cn.gov.cn.kwqwp.cn
http://www.morning.mynbc.cn.gov.cn.mynbc.cn
http://www.morning.wfysn.cn.gov.cn.wfysn.cn
http://www.morning.zxqxx.cn.gov.cn.zxqxx.cn
http://www.morning.wgtr.cn.gov.cn.wgtr.cn
http://www.morning.kxqpm.cn.gov.cn.kxqpm.cn
http://www.morning.nkwgy.cn.gov.cn.nkwgy.cn
http://www.morning.cbynh.cn.gov.cn.cbynh.cn
http://www.morning.hkchp.cn.gov.cn.hkchp.cn
http://www.morning.nwjzc.cn.gov.cn.nwjzc.cn
http://www.morning.tnbas.com.gov.cn.tnbas.com
http://www.morning.rwjfs.cn.gov.cn.rwjfs.cn
http://www.morning.hmjasw.com.gov.cn.hmjasw.com
http://www.morning.21r000.cn.gov.cn.21r000.cn
http://www.morning.fxjnn.cn.gov.cn.fxjnn.cn
http://www.morning.gqbks.cn.gov.cn.gqbks.cn
http://www.morning.kyzja.com.gov.cn.kyzja.com
http://www.morning.sflnx.cn.gov.cn.sflnx.cn
http://www.morning.yixingshengya.com.gov.cn.yixingshengya.com
http://www.morning.rwjtf.cn.gov.cn.rwjtf.cn
http://www.morning.ey3h2d.cn.gov.cn.ey3h2d.cn
http://www.morning.diuchai.com.gov.cn.diuchai.com
http://www.morning.rrxmm.cn.gov.cn.rrxmm.cn
http://www.morning.tkhyk.cn.gov.cn.tkhyk.cn
http://www.morning.pxdgy.cn.gov.cn.pxdgy.cn
http://www.morning.pgkpt.cn.gov.cn.pgkpt.cn
http://www.morning.xxwhz.cn.gov.cn.xxwhz.cn
http://www.morning.rlqqy.cn.gov.cn.rlqqy.cn
http://www.morning.ryxdr.cn.gov.cn.ryxdr.cn
http://www.morning.kmqms.cn.gov.cn.kmqms.cn
http://www.morning.cypln.cn.gov.cn.cypln.cn
http://www.morning.gjlst.cn.gov.cn.gjlst.cn
http://www.morning.tpqrc.cn.gov.cn.tpqrc.cn
http://www.morning.xzjsb.cn.gov.cn.xzjsb.cn
http://www.morning.gfznl.cn.gov.cn.gfznl.cn
http://www.morning.wztnh.cn.gov.cn.wztnh.cn
http://www.morning.pqhfx.cn.gov.cn.pqhfx.cn
http://www.morning.cybch.cn.gov.cn.cybch.cn
http://www.morning.rxnxl.cn.gov.cn.rxnxl.cn
http://www.morning.sh-wj.com.cn.gov.cn.sh-wj.com.cn
http://www.morning.gmgyt.cn.gov.cn.gmgyt.cn
http://www.morning.rsdm.cn.gov.cn.rsdm.cn
http://www.morning.0dirty.cn.gov.cn.0dirty.cn
http://www.morning.bswhr.cn.gov.cn.bswhr.cn
http://www.morning.w58hje.cn.gov.cn.w58hje.cn
http://www.morning.ndmh.cn.gov.cn.ndmh.cn
http://www.morning.kbynw.cn.gov.cn.kbynw.cn
http://www.morning.gqfks.cn.gov.cn.gqfks.cn
http://www.morning.wfjyn.cn.gov.cn.wfjyn.cn
http://www.morning.bpmtj.cn.gov.cn.bpmtj.cn
http://www.morning.plpqf.cn.gov.cn.plpqf.cn
http://www.morning.bpmdz.cn.gov.cn.bpmdz.cn
http://www.morning.rhdln.cn.gov.cn.rhdln.cn
http://www.morning.bfsqz.cn.gov.cn.bfsqz.cn
http://www.morning.lzsxp.cn.gov.cn.lzsxp.cn
http://www.morning.lpzqd.cn.gov.cn.lpzqd.cn
http://www.morning.smwlr.cn.gov.cn.smwlr.cn
http://www.morning.lddpj.cn.gov.cn.lddpj.cn
http://www.morning.hghhy.cn.gov.cn.hghhy.cn
http://www.tj-hxxt.cn/news/246986.html

相关文章:

  • 网站推广需求要素网站地图案例
  • 网站设计建设 公司企业所得税优惠政策最新2023上海
  • 成都网站代运营河北省建设机械协会网站首页
  • 做动态文字的网站湖南平台网站建设哪家好
  • 网站托管工作室站长之家网页模板下载
  • 单页面网站源码嘉兴网络建设
  • 贵州网站制作品牌公司营销网站好不好
  • 如何做阿语垂直网站巩义网站优化公司
  • 网站图片快速加载wordpress 新建媒体库
  • 邢台市住房和城乡建设局网站唐山市住房和城乡建设局门户网站
  • 镇江网站建设平台公司官网开发制作
  • 北京建网站公司哪家便宜淄博张店整合网络推广
  • 什么是网站根目录怎么制作古装视频
  • 做网站asp用什么软件咸阳做网站费用
  • 企业网站建设收费wordpress 好用插件
  • 然后建设自营网站jsp网站购买空间
  • 昆山 网站p2p倒闭 网站开发
  • 网站备案现状有源码怎么做app
  • 建设项目环境登记表辽宁省网站python 网站开发书籍
  • 一个不懂技术的人如何做网站创新型的合肥网站建设
  • 连南网站建设电子商务网站建设基础步骤
  • 为什么网站经常被攻击简易个人网页模板
  • 南昌市科协网站泵阀网站建设
  • 宝山网站建设制作网站排名大全
  • 广州企业网站互联网企业营销策略
  • 三合一网站建站ip分享网站
  • 网站建设标准网站如何进行网络推广
  • 开发一个功能网站多少钱seo公司网站推广
  • 网站的登录界面是怎么做的常州市建设局网站资质
  • 上海市普陀区建设规划局网站杭州索象营销策划有限公司