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

建设银行官方网站wordpress怎么看分类id

建设银行官方网站,wordpress怎么看分类id,电子政务门户网站建设教训,全渠道运营平台系统1. HarmonyOS应用打包后的文件扩展名是? 打包后的文件扩展名为.hap#xff08;HarmonyOS Ability Package#xff09;#xff0c;这是HarmonyOS应用的标准包格式 2. 页面和自定义组件生命周期有哪些? 页面和自定义组件生命周期说明 有Entry装饰器的component组件的生命…1. HarmonyOS应用打包后的文件扩展名是? 打包后的文件扩展名为.hapHarmonyOS Ability Package这是HarmonyOS应用的标准包格式 2. 页面和自定义组件生命周期有哪些? 页面和自定义组件生命周期说明 有Entry装饰器的component组件的生命周期 onPageShow页面每次显示时触发一次包括路由过程、应用进入前台等场景。onPageHide页面每次隐藏时触发一次包括路由过程、应用进入后台等场景。onBackPress当用户点击返回按钮时触发。 有Entry装饰器和无Entry装饰器Component组件都有的生命周期 aboutToAppear组件即将出现时回调该接口具体时机为在创建自定义组件的新实例后在执行其 build()函数之前执行。onDidBuildAPI12新增组件 build()函数执行完成之后回调该接口不建议在 onDidBuild函数中更改状态变量、使用 animateTo等功能这会导致不稳定的UI表现。aboutToDisappearaboutToDisappear函数在自定义组件析构销毁之前执行。不允许在aboutToDisappear函数中改变状态变量特别是Link变量的修改会导致应用程序行为不稳定。 3. 如何进行数据持久化? 应用数据持久化 用户首选项Preferences这是一种轻量级的配置数据持久化方式适用于保存应用配置信息、用户偏好设置等。它通过文本形式保存数据并且数据会全量加载到内存中因此访问速度快但不适合存储大量数据。键值型数据库KV-Store适用于存储结构简单的数据如商品名称和价格、员工工号和出勤状态等。键值型数据库以“键值对”的形式组织数据适合数据关系不复杂的场景。关系型数据库RelationalStore基于SQLite适用于存储包含复杂关系的数据如学生信息、雇员信息等。关系型数据库提供了一系列SQL操作如增删改查等。 4. 如何进行全局状态管理? 应用全局的UI状态存储 1. ProvideConsume装饰器 适用场景适用于整个组件树而言“全局”的状态共享且该状态改动不频繁的场景。工作原理通过在最顶层组件中使用 Provide装饰器提供状态其他需要共享状态的组件通过 Consume装饰器获取该状态 。优点减少了状态传递的层级提升了代码的可维护性和可拓展性。注意事项确保状态的生命周期与组件树的生命周期一致避免不必要的UI刷新。 2. AppStorage 适用场景适用于整个应用而言“全局”的变量或应用的主线程内多个 UIAbility实例间的状态共享。工作原理AppStorage与应用的进程绑定由UI框架在应用程序启动时创建当应用进程终止AppStorage被回收。优点适用于需要在整个应用中共享状态的场景。注意事项确保状态的生命周期与应用进程一致避免在应用退出后仍有状态存在。 3. LocalStorage 适用场景适用于单个Ability而言“全局”的变量主要用于不同页面间的状态共享。工作原理LocalStorage的生命周期由应用程序决定当应用释放最后一个指向 LocalStorage的引用时LocalStorage被垃圾回收。优点适用于需要在单个UIAbility中不同页面间共享状态的场景。注意事项确保状态的生命周期与应用程序的生命周期一致避免在应用退出后仍有状态存在。 5. LocalStorage在应用重启后数据会消失吗? 页面级UI状态存储 会 因为LocalStorage 是一种用于页面或组件级别的数据存储方式它允许开发者在页面或组件的生命周期内存储和检索数据。LocalStorage 的数据存储在内存中因此它的读写速度相对较快。但是当应用重启后LocalStorage 中的数据会丢失。 6. 父子组件如何通信? Prop装饰器、Link装饰器、Provide和Consume装饰器、Event装饰器、Parame装饰器、Provider装饰器和Consumer装饰器 当前(API 12)状态管理有两个版本 Component和 ComponentV2 1. 父子单向数据传递 StatePropProp装饰的变量可以和父组件建立单向的同步关系。Prop装饰的变量是可变的但是变化不会同步回其父组件。2. 父子双向数据传递 StateLink 、objectLinkLink 子组件中被 Link装饰的变量与其父组件中对应的数据源建立双向数据绑定。3. 跨组件通信 Provide装饰器和 Consume装饰器Provide和 Consume应用于与后代组件的双向数据同步应用于状态数据在多个层级之间传递的场景。不同于 Prop和 LinkProvide和 Consume摆脱参数传递机制的束缚实现跨层级传递。4. Observed装饰器和 ObjectLink装饰器 对于多层嵌套的情况比如二维数组或者数组项class或者class的属性是class他们的第二层的属性变化是无法观察到的。这就要用到 Observed/ObjectLink装饰器 注意:ObjectLink装饰器不能在 Entry装饰的自定义组件中使用且 ObjectLink 装饰的变量不能被赋值,只能对其属性进行赋值操作 7. 兄弟组件如何通信? 1. 通过公共父组件传递 如果两个组件是同一个父组件的子组件可以通过父组件来传递数据或事件。父组件可以作为中介将一个子组件的数据或事件传递给另一个子组件。 2. 使用全局状态管理 使用全局状态管理如 AppStorage、LocalStorage来存储共享数据。兄弟组件可以独立地读取和更新这个全局状态从而实现通信。 8. 如何实现页面间的通信? 1.使用 Provide和 Consume装饰器(见6.3) 2.使用路由跳转传参 import { router } from kit.ArkUI; router.pushUrl({url: pages/Detail, // 目标urlparams: paramsInfo // 添加params属性传递自定义参数})// 返回指定页面并携带参数router.back({url: pages/Home,params: {info: 来自Home页} });3.使用导航跳转传参 this.pageStack.pushPath({ name: PageOne, param: PageOne Param }) this.pageStack.pushPathByName(PageOne, PageOne Param)9. Navigation组件跳转和router跳转有什么区别? 官方文档写了很多捡几个我觉得比较重要的写的 Navigation是路由容器组件适用于模块内和跨模块的路由切换一次开发多端部署场景。Router位于页面栈管理节点 stage 下面不提供导航容器的概念。Navigation和 Router都支持跳转传参但 Router对象中暂不支持方法变量。Navigation支持清理指定路由页面栈没有上限可以无限跳转。Router不支持清理指定路由且页面栈最大为32页面栈到达32之后必须清除之后才能继续跳转。Navigation支持自定义转场动画和共享元素转场动画。 Router仅支持简单自定义转场动画。Navigation支持通过 setInterception 方法设置路由拦截。Router不支持路由拦截。Navigation支持沉浸式页面和模态嵌套路由。Router不支持需要通过窗口配置实现沉浸式页面。 总而言之Navigation 组件在功能上更具丰富性和灵活性特别是在处理复杂的导航结构、动效和路由管理方面。 而 Router 则提供了更基础的路由跳转功能适合简单的路由需求。开发者可以根据应用的具体需求和设计选择最合适的路由方案。 具体的区别如下表: 10. HarmonyOS与Android和iOS有什么区别 HarmonyOS 是华为开发的一个开源、分布式的操作系统。它设计用于多种设备包括智能手机、平板电脑、智能电视和物联网设备。与Android和iOS的主要区别在于 分布式架构HarmonyOS支持跨设备无缝协作允许设备之间共享硬件资源。性能HarmonyOS优化了任务调度和内存管理提高了性能和响应速度。安全性HarmonyOS采用了多层次的安全策略包括数据加密和安全启动。生态系统HarmonyOS正在构建自己的应用生态系统鼓励开发者使用Ark Ts和ArkUI框架。 11. 什么是Ability Ability是应用/服务所具备的能力的抽象一个Module可以包含一个或多个 Ability ,在鸿蒙系统中Ability提供了对 Ability生命周期、上下文环境等调用管理的能力包括 Ability创建、销毁、转储客户端信息等 鸿蒙系统中的 Ability主要分为两种类型UIAbility和 ExtensionAbility。 1. UIAbility 定义 包含UI界面提供展示UI的能力主要用于和用户交互 。创建 在模块中添加UIAbility时选中对应的模块单击鼠标右键选择New Ability设置Ability名称选择是否在设备主屏幕上显示该功能的启动图标单击Finish完成Ability创建 。 2. ExtensionAbility 定义 提供特定场景的扩展能力满足更多的使用场景 。创建 在模块中添加ExtensionAbility时选中对应的模块单击鼠标右键选择不同的场景类型如Accessibility、EmbeddedUIExtensionAbility等 。当前仅Application工程支持创建ExtensionAbility。设置Ability名称单击Finish完成ExtensionAbility创建。 此外Ability是Ability模块的基类提供系统配置更新回调和系统内存调整回调 。Ability的继承关系包括UIAbility和ExtensionAbility等具体类. 总之Ability是鸿蒙系统中用于管理应用能力的核心组件通过不同类型的Ability可以实现不同的功能需求。 12. ArkUI框架有哪些特点 ArkUI框架是鸿蒙HarmonyOS中的一个重要组件框架具有以下几个特点 组件树结构 ArkUI框架通过布局组件和基础组件构建界面描述树组件树其中基础组件为叶子节点布局组件为中间节点 。当用户进行交互时会触发界面修改通过重新渲染组件树来实现应用界面更新 。数据与UI更新过程 ArkUI框架的数据处理过程和UI更新过程是分开进行的。数据处理过程中主要是对状态数据进行更新并通过标脏过程确定布局最小影响范围减少不必要的重新布局 。UI更新过程包括组件标脏、布局、测量和渲染等阶段 。布局组件 ArkUI框架提供了多种布局组件如Row、Column、Stack、Flex、List、Grid、RelativeContainer等。开发者可以根据场景选择合适的布局组件以优化性能 。例如线性布局Row、Column适用于横向或纵向排列组件而弹性布局Flex适用于需要弹性排列的场景。性能优化 ArkUI框架在性能优化方面做了很多工作。例如通过减少不必要的组件嵌套和节点数量降低布局测算的复杂度从而提升性能。开发者可以使用DevEco Studio提供的工具如Profiler和ArkUI Inspector来查看性能瓶颈和组件树结构进一步优化应用性能。状态管理 ArkUI框架支持状态管理最佳实践通过有效的状态管理减少无效的UI更新操作提升性能。例如在状态变量变化导致UI更新时只更新部分组件而不是重新渲染整个界面。 13. 跨设备通信的方式有哪些 HarmonyOS支持多种跨设备通信方式包括 分布式软总线一种高性能的通信机制允许设备之间建立直接连接进行数据传输。蓝牙使用标准的蓝牙技术进行设备间的通信。WLAN通过WLAN网络实现设备间的通信。远程服务调用通过分布式任务调度实现跨设备的服务调用。 14. 如何实现应用的后台运行 后台服务使用后台服务如BackgroundService来执行不需要用户直接交互的任务。定时任务通过系统提供的定时任务机制如AlarmService来周期性执行后台任务。事件监听注册系统事件如网络变化、电量变化等以在特定事件发生时唤醒应用进行处理。 15. Ability是如何与用户交互的 界面显示Ability可以包含一个或多个AbilitySlice用于显示UI界面并与用户进行交互。事件处理Ability可以处理用户的输入事件如触摸、按键等。数据绑定Ability可以使用数据绑定机制将UI组件与数据模型绑定实现数据的自动更新和交互。通知Ability可以通过系统通知机制向用户发送通知即使应用不在前台运行。 16. 如何实现应用的多语言支持 资源文件为每种语言创建资源文件如string.json并在里面定义所有可本地化的字符串。资源引用在代码中使用资源ID引用字符串而不是硬编码文本。系统设置应用会自动根据系统设置的语言环境加载相应的资源文件。动态切换支持在应用运行时切换语言并动态更新UI。 17. 分布式数据库是如何实现数据同步的 分布式事务确保跨设备的数据库操作具有原子性、一致性、隔离性和持久性。数据版本控制为数据添加版本号确保同步时数据的一致性。冲突解决策略定义冲突解决策略处理并发操作导致的数据冲突。网络状态感知根据网络状态智能同步数据优化同步效率和流量使用。 18. 如何优化应用的性能 内存管理合理分配和释放内存避免内存泄漏。后台优化合理使用后台服务和定时任务避免不必要的后台运行。UI渲染优化使用轻量级的UI组件减少布局复杂度优化渲染性能。资源优化压缩图片和媒体资源减少应用的体积和加载时间。 19. HarmonyOS中的权限管理模型是怎样的 权限声明应用在config.json中声明所需的权限。权限申请在应用运行时根据需要动态申请权限。权限检查在执行敏感操作前检查是否已获得相应权限。权限分组系统将权限分为不同的组便于管理和申请。 20. LazyForEach是什么 LazyForEach 是一个用于高效渲染列表的组件或功能它允许开发者在用户滚动列表时才加载和渲染列表项而不是一次性渲染整个列表。这种按需渲染的方式可以显著提高应用的性能特别是在处理大量数据时。 21. LazyForEach的工作原理是什么 LazyForEach 的工作原理通常是基于用户的滚动位置来动态地创建和销毁列表项的组件实例。当用户滚动到列表的某个部分时LazyForEach 会加载并渲染那些即将进入视图的列表项同时可能会卸载那些滚出视图的列表项以节省内存和计算资源。 22. Router.replace()方法的作用是什么和Router.pushUrl()方法有什么区别 Router.replace()方法用于替换当前路由并将目标路由压入栈顶。与Router.pushUrl()方法不同Router.replace()方法不会保留当前路由而是直接替换掉当前路由。 23. 如何实现应用的沉浸式模式 沉浸式模式是指应用界面呈现出沉浸式的全屏模式不留任何系统UI用户只能看到应用内容。在沉浸式模式下应用的UI元素会被覆盖但系统状态栏、导航栏、键盘等系统UI依然可见。以下是实现步骤 1. 设置窗口属性 在应用的入口Ability中可以通过设置窗口属性来实现沉浸式模式。这通常涉及到配置窗口特性Window Features来隐藏状态栏和导航栏。2. 使用系统API 鸿蒙OS提供了API来控制系统UI的显示和隐藏。你可以在应用的代码中调用这些API来实现沉浸式效果。3. 配置应用的配置文件 在应用的config.json或其他配置文件中可以声明应用需要的窗口特性如ohos:immersive。4. 动态切换 应用可以根据用户的交互或特定场景动态地进入或退出沉浸式模式。这可能涉及到监听用户的手势或其他事件来切换UI状态。5. 适配不同设备 不同的设备可能有不同的屏幕和系统UI因此在实现沉浸式模式时需要考虑不同设备的适配问题。 24. 如何获取屏幕的安全区域? 可以通过设置组件的expandSafeArea属性来获取获取UIWindow首先你需要获取到当前页面的UIWindow实例。调用getSafeArea方法通过UIWindow实例调用getSafeArea方法来获取安全区域的Rect对象。 示例: import ohos.aafwk.ability.AbilitySlice; import ohos.aafwk.content.Intent; import ohos.agp.window.UIWindow; import ohos.agp.utils.Rect; public class MyAbilitySlice extends AbilitySlice {Overridepublic void onStart(Intent intent) {super.onStart(intent);setUIContent(new SurfaceLayout(this));UIWindow window getUIWindow();if (window ! null) {// 获取安全区域Rect safeArea window.getSafeArea();// 在这里可以使用safeArea对象它包含了安全区域的位置和尺寸信息// 例如可以使用safeArea.left, safeArea.top, safeArea.right, safeArea.bottom}} }25. ArkTs是什么? ArkTs介绍 ArkTS是HarmonyOS优选的主力应用开发语言。保持了TypeScript的基本风格同时通过规范定义强化开发期静态检查和分析提升程序执行稳定性和性能。 ArkTS的主要特点包括 静态类型检查ArkTS在编译时进行类型检查这有助于在代码运行前发现和修复错误提高代码的稳定性和性能。声明式UIArkTS定义了声明式UI描述允许开发者以更简洁、更自然的方式开发跨端应用。状态管理ArkTS提供了多维度的状态管理机制使得与UI相关联的数据可以在组件内使用也可以在不同组件层级间传递支持单向和双向数据流。渲染控制ArkTS支持条件渲染、循环渲染和数据懒加载允许开发者根据应用的不同状态渲染UI内容。兼容性ArkTS兼容TS/JavaScript生态开发者可以使用TS/JS进行开发或复用已有代码。并发机制ArkTS支持轻量化的并发机制允许开发者编写并发代码提高应用的性能和响应速度。 26. ArkTs与TypeScript有什么区别(答5点以上) ArkTs官方文档 ArkTS 是基于 TypeScript 开发的框架,但是有一些限制和差异。ArkTS 旨在提供更严格的类型检查和优化的代码性能同时确保与 HarmonyOS 的开发环境和特性兼容。以下是 ArkTS 与 TypeScript 的差异 不支持使用对象字面量声明类型。不支持使用 var关键字。不支持使用 in运算符。不支持导入断言。不支持使用 any类型。不支持使用 import赋值表达式。不支持使用 require导入 具体区别: 生成器函数ArkTS 不支持 TypeScript 中的生成器函数使用 function* 定义的函数应使用 async 或 await 机制进行并行任务处理 。参数解构在函数参数中使用解构赋值是 TypeScript 的特性ArkTS 不支持参数解构需要显式传递参数 。函数内声明函数TypeScript 允许在函数内部声明新的函数而 ArkTS 不支持在函数内声明函数应使用 lambda 函数代替 。new.targetArkTS 不支持 new.target 元属性这是 TypeScript 中用于反射的属性 。确定赋值断言TypeScript 中的 ! 确定赋值断言在 ArkTS 中不被支持应初始化变量或使用其他方式确保赋值 。原型上的赋值ArkTS 不支持在对象的原型上进行赋值这与 TypeScript 不同 。globalThisArkTS 不支持 globalThis这是 TypeScript 中用于获取全局对象的属性 。Function.prototype.apply、Function.prototype.call 和 Function.prototype.bindArkTS 不支持这些函数它们在 TypeScript 中用于控制函数的 this 绑定 。instanceof 和 as 类型保护ArkTS 不支持 is 运算符必须使用 instanceof 运算符替代并且在使用之前必须使用 as 运算符将对象转换为需要的类型 。接口继承类在 TypeScript 中接口可以继承类但在 ArkTS 中接口只能继承接口 。构造函数类型ArkTS 不支持使用构造函数类型应改用 lambda 函数 。enum 声明合并ArkTS 不支持 enum 声明合并所有相关的枚举成员必须在同一个声明中 。命名空间作为对象ArkTS 不支持将命名空间用作对象可以使用类或模块替代 。非声明语句在命名空间中ArkTS 中命名空间用于定义标志符可见范围不支持命名空间中的非声明语句 。import default as ...ArkTS 不支持 import default as ... 语法应使用显式的 import ... from ... 语法 。require 和 import 赋值表达式ArkTS 不支持通过 require 导入也不支持 import 赋值表达式应使用 import 语法 。ambient 模块声明ArkTS 不支持 declare module 语法应直接导入需要的内容 。new.targetArkTS 不支持 new.target 元属性这是 TypeScript 中用于反射的属性 。Function.prototype.apply、Function.prototype.call 和 Function.prototype.bindArkTS 不支持这些函数它们在 TypeScript 中用于控制函数的 this 绑定 。as const 断言ArkTS 不支持 as const 断言这是 TypeScript 中用于标注字面量的相应字面量类型的语法 。anyArkTS 不支持any类型, 应使用更具体的类型替代 。 27. Provider和Consumer vs Provide和Consume的区别 Provider和Consumer 官方文档 28. Prop和ObjectLink装饰器有什么区别 1.用途 Prop装饰器主要用于在组件之间传递数据将父组件的值传递给子组件。它定义了子组件的属性可以接收来自父组件的赋值。ObjectLink用于建立对象之间的链接通常用于在组件内部或组件之间共享和同步状态。它可以将一个对象的属性与另一个对象的属性进行链接当一个对象的属性发生变化时另一个对象的属性也会自动更新。 2. 数据传递方式 Prop是单向的数据传递从父组件到子组件。父组件可以设置子组件的 Prop属性值但子组件不能直接修改这个值。ObjectLink是双向的数据传递父组件和子组件都可以修改子组件的 ObjectLink属性值。 3. 性能 Prop会深拷贝数据具有拷贝的性能开销性能低于 ObjectLink详见官方文档。 29. ForEach和LazyForEach的区别 ForEach和LazyForEach都是用于渲染列表的装饰器它们的区别在于 ForEach渲染列表时会将列表中的每一项都渲染一次适用于列表项数量较少的情况。LazyForEach渲染列表时只渲染当前可见的列表项适用于列表项数量较多的情况。 30. UIAbility的生命周期有哪些 官方文档说明 UIAbility的生命周期包括Create、Foreground、Background、Destroy四个状态 31. H5如何与HarmonyOS应用(webView)进行通信官方文档 应用侧调用前端页面JS函数 应用侧可以通过runJavaScript()方法异步调用前端页面的JavaScript相关函数并通过Promise方式返回脚本执行的结果。runJavaScript需要在loadUrl完成后比如onPageEnd中调用。 前端页面调用应用侧函数 使用Web组件将应用侧代码注册到前端页面中注册完成之后前端页面中使用注册的对象名称就可以调用应用侧的函数实现在前端页面中调用应用侧方法。注册应用侧代码有两种方式一种在Web组件初始化调用使用javaScriptProxy()接口。另外一种在Web组件初始化完成后调用使用registerJavaScriptProxy()接口。 32. 如何实现图片上传? 有两种方式原生和Web组件: 原生:使用上传下载模块ohos.request的上传接口将本地文件(图片)上传需声明权限ohos.permission.INTERNET。 代码示例 // pages/xxx.ets import { common } from kit.AbilityKit; import fs from ohos.file.fs; import { BusinessError, request } from kit.BasicServicesKit;// 获取应用文件路径 let context getContext(this) as common.UIAbilityContext; let cacheDir context.cacheDir;// 新建一个本地应用文件 let file fs.openSync(cacheDir /test.txt, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE); fs.writeSync(file.fd, upload file test); fs.closeSync(file);// 上传任务配置项 let header new MapObject, string(); header.set(key1, value1); header.set(key2, value2); let files: Arrayrequest.File [ //uri前缀internal://cache 对应cacheDir目录{ filename: test.txt, name: test, uri: internal://cache/test.txt, type: txt } ] let data: Arrayrequest.RequestData [{ name: name, value: value }]; let uploadConfig: request.UploadConfig {url: https://xxx,header: header,method: POST,files: files,data: data }// 将本地应用文件上传至网络服务器 try {request.uploadFile(context, uploadConfig).then((uploadTask: request.UploadTask) {uploadTask.on(complete, (taskStates: Arrayrequest.TaskState) {for (let i 0; i taskStates.length; i) {console.info(upload complete taskState: ${JSON.stringify(taskStates[i])});}});}).catch((err: BusinessError) {console.error(Invoke uploadFile failed, code is ${err.code}, message is ${err.message});}) } catch (error) {let err: BusinessError error as BusinessError;console.error(Invoke uploadFile failed, code is ${err.code}, message is ${err.message}); }使用axios上传:使用axios上传文件需安装axios依赖。 注意事项 上传文件需要单独导入FormData模块当前版本只支持 Stage 模型上传类型支持uri和ArrayBufferuri支持“internal”协议类型和沙箱路径仅支持internal协议类型internal://cache/为必填字段示例 internal://cache/path/to/file.txt;沙箱路径示例cacheDir ‘/hello.txt’请求的表单数据值为string类型支持设置多部分表单数据的数据名称和数据类型类型上传参数context:当uri为沙箱路径无需传参context若uri为“internal”协议类型必须传参context 当上传的内容为ArrayBuffer时用法如下 import axios from ohos/axios import { FormData } from ohos/axios import fs from ohos.file.fs;// ArrayBuffer let formData new FormData() let cacheDir getContext(this).cacheDir try {// 写入let path cacheDir /hello.txt;let file fs.openSync(path, fs.OpenMode.CREATE | fs.OpenMode.READ_WRITE)fs.writeSync(file.fd, hello, world); // 以同步方法将数据写入文件fs.fsyncSync(file.fd); // 以同步方法同步文件数据。fs.closeSync(file.fd);// 读取let file2 fs.openSync(path, 0o2);let stat fs.lstatSync(path);let buf2 new ArrayBuffer(stat.size);fs.readSync(file2.fd, buf2); // 以同步方法从流文件读取数据。fs.fsyncSync(file2.fd);fs.closeSync(file2.fd);formData.append(file, buf2);// formData.append(file, buf2, { filename: text.txt, type: text/plain}); 设置多部分表单数据的数据名称和数据类型类型 } catch (err) {console.info(err: JSON.stringify(err)); } // 发送请求 axios.poststring, AxiosResponsestring, FormData(this.uploadUrl, formData, {headers: { Content-Type: multipart/form-data },context: getContext(this),onUploadProgress: (progressEvent: AxiosProgressEvent): void {console.info(progressEvent progressEvent.loaded progressEvent.total ? Math.ceil(progressEvent.loaded / progressEvent.total * 100) % : 0%); }, }).then((res: AxiosResponse) {console.info(result JSON.stringify(res.data)); }).catch((error: AxiosError) {console.error(error: JSON.stringify(error)); })当上传的uri时用法如下 import axios from ohos/axios import { FormData } from ohos/axioslet formData new FormData() formData.append(file, internal://cache/blue.jpg) // formData.append(file, cacheDir /hello.txt); uri支持传入沙箱路径// 发送请求 axios.poststring, AxiosResponsestring, FormData(https://www.xxx.com/upload, formData, {headers: { Content-Type: multipart/form-data },context: getContext(this),onUploadProgress: (progressEvent: AxiosProgressEvent): void {console.info(progressEvent progressEvent.loaded progressEvent.total ? Math.ceil(progressEvent.loaded / progressEvent.total * 100) % : 0%);}, }).then((res: AxiosResponsestring) {console.info(result JSON.stringify(res.data)); }).catch((err: AxiosError) {console.error(error: JSON.stringify(err)); })33.hap、har、hsp三者的区别? HAPHarmony Ability Package是应用安装和运行的基本单元。HAP包是由代码、资源、第三方库、配置文件等打包生成的模块包其主要分为两种类型entry和feature。又称abilityHARHarmony Archive是静态共享包可以包含代码、C库、资源和配置文件。通过HAR可以实现多个模块或多个工程共享ArkUI组件、资源等相关代码。又称static library, 静态共享包HSPHarmony Shared Package是动态共享包可以包含代码、C库、资源和配置文件通过HSP可以实现代码和资源的共享。HSP不支持独立发布而是跟随其宿主应用的APP包一起发布与宿主应用同进程具有相同的包名和生命周期。又称shared library, 动态共享包 34. 鸿蒙常用的装饰器有哪些 State 定义状态当前组件能使用Prop 父子组件通信特点子组件数据不能修改Link 父子组件通信特点子组件数据可以修改Observed 和 ObjectLink 父子组件通信特点嵌套第二层数据修改可以达到响应式之前方案不行Provide 和 Consume 祖孙组件通信Builder 和 BuilderParam 父子组件通信通信组件数据Watch 监视数据的变化第一次不会触发 35. 如何启动一个 ability? 通过 context 对象的 startAbility 方法官方文档: import { common, Want } from kit.AbilityKit; import { BusinessError } from kit.BasicServicesKit;context getContext(this) as common.UIAbilityContext; // UIAbilityContextconst want: Want {deviceId: , // deviceId为空表示本设备bundleName: com.example.system, // AppScope/app.json5 中找abilityName: SecondAbility, // 去对应的ability内部找module.json5// moduleName: entry // moduleName非必选parameters: { // 携带参数} }; this.context.startAbility(want, (err: BusinessError) {if (err.code) {// 显式拉起Ability通过bundleName、abilityName和moduleName可以唯一确定一个Abilityconsole.error(Failed to startAbility. Code: ${err.code}, message: ${err.message});} });36. 显示 want 和 隐式 want 的区别? 官方文档 显式Want在启动目标应用组件时调用方传入的want参数中指定了abilityName和bundleName称为显式Want。显式Want通常用于应用内组件启动通过在Want对象内指定本应用Bundle名称信息bundleName和abilityName来启动应用内目标组件。当有明确处理请求的对象时显式Want是一种简单有效的启动目标应用组件的方式。例如打开其他窗口隐式Want在启动目标应用组件时调用方传入的want参数中未指定abilityName称为隐式Want。当需要处理的对象不明确时可以使用隐式Want在当前应用中使用其他应用提供的某个能力而不关心提供该能力的具体应用。隐式Want使用skills标签来定义需要使用的能力并由系统匹配声明支持该请求的所有应用来处理请求。例如需要打开一个链接的请求系统将匹配所有声明支持该请求的应用然后让用户选择使用哪个应用打开链接。例如将pdf文件传递给其他应用窗口 总的来说 显示want和隐式want的区别在于有无abilityName。有就是显示want没有就是隐式want显示want主要用于当前应用窗口跳转隐式want打开其他应用的窗口 37. 三层架构是什么 官方文档 三层架构为了“一次开发多端部署”项目结构采用三层架构 三层工程结构如下 commons公共能力层用于存放公共基础能力集合如工具库、公共配置等。commons层可编译成一个或多个HAR包或HSP包只可以被products和features依赖不可以反向依赖。features基础特性层开发页面、组件HAR包或HSP包。products产品定制层定义phone\pad两个ability引用 features 的包和 commons 的包完成应用功能 38. 优化内存有哪些方法 官方文档 1. 使用onMemoryLevel监听内存变化 2. 使用LRUCache优化ArkTS内存 例如我们搜索租房列表可以无限加载租房数据这样数据会越来越多我们使用LRUCacheUtil来管理数据3. 使用生命周期管理优化ArkTS内存 例如aboutToDisappear中销毁订阅事件清除定时器等4.使用purgeable优化C内存 39. 多线程实现方式TaskPoll和Worker的区别? TaskPool和Worker均支持多线程并发能力。由于TaskPool的工作线程会绑定系统的调度优先级并且支持负载均衡自动扩缩容而Worker需要开发者自行创建存在创建耗时以及不支持设置调度优先级故在性能方面使用TaskPool会优于Worker因此大多数场景推荐使用TaskPool。TaskPool偏向独立任务维度该任务在线程中执行无需关注线程的生命周期超长任务大于3分钟且非长时任务会被系统自动回收而Worker偏向线程的维度支持长时间占据线程执行需要主动管理线程生命周期。 40. 音视频的组件的使用方式? 视频组件 Video controller: VideoController new VideoController() Video({src: $rawfile(test.mp4),previewUri: $r(app.media.startIcon),controller: this.controller }) .width(100%) .height(200) .autoPlay(true) .controls(true)音频组件 Audio 官方文档(了解) //配置音频渲染参数并创建AudioRenderer实例音频渲染参数的详细信息可以查看AudioRendererOptions。 import { audio } from kit.AudioKit; let audioStreamInfo: audio.AudioStreamInfo {samplingRate: audio.AudioSamplingRate.SAMPLE_RATE_48000, // 采样率channels: audio.AudioChannel.CHANNEL_2, // 通道sampleFormat: audio.AudioSampleFormat.SAMPLE_FORMAT_S16LE, // 采样格式encodingType: audio.AudioEncodingType.ENCODING_TYPE_RAW // 编码格式 }; let audioRendererInfo: audio.AudioRendererInfo {usage: audio.StreamUsage.STREAM_USAGE_VOICE_COMMUNICATION,rendererFlags: 0 }; let audioRendererOptions: audio.AudioRendererOptions {streamInfo: audioStreamInfo,rendererInfo: audioRendererInfo }; audio.createAudioRenderer(audioRendererOptions, (err, data) {if (err) {console.error(Invoke createAudioRenderer failed, code is ${err.code}, message is ${err.message});return;} else {console.info(Invoke createAudioRenderer succeeded.);let audioRenderer data;} }); // 调用on(writeData)方法订阅监听音频数据写入回调。 import { BusinessError } from kit.BasicServicesKit; import { fileIo } from kit.CoreFileKit; let bufferSize: number 0; class Options {offset?: number;length?: number; } let path getContext().cacheDir; //确保该路径下存在该资源 let filePath path /StarWars10s-2C-48000-4SW.wav; let file: fileIo.File fileIo.openSync(filePath, fileIo.OpenMode.READ_ONLY); let writeDataCallback (buffer: ArrayBuffer) {let options: Options {offset: bufferSize,length: buffer.byteLength}fileIo.readSync(file.fd, buffer, options);bufferSize buffer.byteLength; } audioRenderer.on(writeData, writeDataCallback); //调用start()方法进入running状态开始渲染音频。 import { BusinessError } from kit.BasicServicesKit; audioRenderer.start((err: BusinessError) {if (err) {console.error(Renderer start failed, code is ${err.code}, message is ${err.message});} else {console.info(Renderer start success.);} }); //调用stop()方法停止渲染。 import { BusinessError } from kit.BasicServicesKit; audioRenderer.stop((err: BusinessError) {if (err) {console.error(Renderer stop failed, code is ${err.code}, message is ${err.message});} else {console.info(Renderer stopped.);} }); // 调用release()方法销毁实例释放资源。 import { BusinessError } from kit.BasicServicesKit; audioRenderer.release((err: BusinessError) {if (err) {console.error(Renderer release failed, code is ${err.code}, message is ${err.message});} else {console.info(Renderer released.);} });
http://www.w-s-a.com/news/373316/

相关文章:

  • 做网站的优势公司网站怎么做站外链接
  • 海城网站制作建设精准营销的营销方式
  • 北京短视频拍摄公司重庆网站seo推广公司
  • 广州免费推广网站建设4399网页游戏大全
  • 网站的构架与组成建站公司兴田德润
  • php网站部署步骤邯郸哪有做网站的
  • 做设计什么设计比较好的网站南充市住房和城乡建设局考试网站
  • 郑州做系统集成的公司网站龙岩
  • 厦门SEO_厦门网站建设网络营销课程视频
  • vs 2015 网站开发开网店在线咨询
  • 前端如何优化网站性能大学学校类网站设计
  • 中国铁路建设投资公司网站熊学军中国it外包公司排名前50
  • 房产网站的建设广州推广排名
  • 湟源县网站建设wordpress删除未分类
  • 营销型网站开发推广厦门百度seo公司
  • 遵义网站开发培训上海中高风险地区名单最新
  • 禹州市门户网站建设做网站可以申请个体户么
  • 大良营销网站建设效果彩票网站搭建 做网站
  • 做网站的公司为什么人少了在中国如何推广外贸平台
  • 盘锦网站制作工业电商网站怎么配色
  • 白云企业网站建设seo排名点击软件
  • wordpress跨站脚本攻击漏洞国外注册的域名国内能用吗
  • 西部数码网站管理助手2工信部资质查询网站
  • 公司网站哪个建的好吉林网站制作
  • 视频网站怎么引流wordpress私人玩物
  • 我的家乡湛江网站设计新钥匙网站建设
  • 辽宁网站推广爱前端wordpress5.0.3主题
  • python怎么做网站贵阳网站制作
  • 深圳网站的优化seo网络推广有哪些
  • 网站建设实习报告范文荆州市城市建设档案馆网站