鸿蒙HarmonyOS经典FAQ
文章平均质量分 77
汇总鸿蒙开发中ArkTS语言、ArkUI框架、DevEco编译平台、元服务等多方面经典问题及解决思路。
这货就是木子全呀
这个作者很懒,什么都没留下…
展开
-
【HarmonyOS NEXT】FAQ之ArkTS语言(线程模型和并发-2)
同时,ArkTS提供了TaskPool并发API,类似GCD的线程池能力,可以执行任务,而且不需要开发者进行线程生命周期管理。Task会被调度到有限数量的工作线程执行,多个task会共享这些工作线程(ArkTS引擎实例),系统会根据负载情况扩容/缩容工作线程的数量,充分发挥硬性性能。ArkTS的多线程是基于事件共享实现的,其数据交换是基于事件进行传递对象,不会出现类似Java的内存共享型多线程出现的多线程操作同一个数据的情况,所以不存在线程安全的问题。可以,TaskPool动态加载能力跟主线程能力一致。原创 2024-09-06 09:47:58 · 881 阅读 · 0 评论 -
【HarmonyOS NEXT】FAQ之ArkTS语言(线程模型和并发-1)
JS线程的I/O异步操作,会在I/O线程执行,JS线程可以同时执行其他操作,不存在阻塞等待问题。同时,ArkTS提供了TaskPool并发API,类似GCD的线程池能力,可以执行任务,而且不需要开发者进行线程生命周期管理。在ArkTS中使用Worker创建线程,Worker线程在主线程中创建,与主线程相互独立,但不能直接操作UI,最多可以创建64个Worker线程。HarmonyOS提供的异步I/O调用均分发到I/O线程池,不会阻塞应用线程,因此不需要独占线程调用I/O,所需的线程数量远小于其他操作系统。原创 2024-09-06 09:47:04 · 1014 阅读 · 0 评论 -
【HarmonyOS NEXT】FAQ之ArkTS语言(ArkTS-4)
在hvigor->hvigor-config.json5中"logging": { //"level": "info" }的注释取消 ,改为debug,改完后的结果为"logging": { "level": "debug" },在编译时就可以看到编译的详细过程。目录:build/default/cache/default/default@CompileArkTS/esmodule/release/obfuscation/nameCache.json。原创 2024-09-06 09:46:18 · 965 阅读 · 0 评论 -
【HarmonyOS NEXT】FAQ之ArkTS语言(ArkTS-3)
TaskPool:TaskPool自行管理生命周期,无需关心任务负载高低,TaskPool最多为cpu online个数 - 1,8核通常为7个,根据负载扩缩容,外部无法控制和超出,如果同时启用超过,则会等待。不支持在TS文件中调用ArkTS文件,对于某些在ArkTS中禁用的语法,例如:with语句等,可以考虑在TS文件中进行编写,再在ArkTS文件中调用的方式实现。ArkTS是静态类型,而解构是依赖于结构兼容性的动态特性并且解构声明中的名称必须和解构对象中的属性名称一致,因此不支持解构。原创 2024-09-06 09:45:15 · 728 阅读 · 0 评论 -
【HarmonyOS NEXT】FAQ之ArkTS语言(ArkTS-2)
ArkTS基于兼容了TS语法,继承了TS的所有特性,当前,ArkTS在TS的基础上主要扩展了声明式UI能力,让开发者能够以更简洁、更自然的方式开发高性能应用。推荐用ArKTS开发UI相关内容,TS可以用来开发业务逻辑相关内容。ts文件不支持调用ets文件中定义的方法。ets调用ts文件中定义的方法,可以使用ES6中import引入及export导出的语法,将ts文件中的方法进行export导出,在ets文件中import引入该方法进行调用。原创 2024-09-06 09:44:29 · 1069 阅读 · 0 评论 -
【HarmonyOS NEXT】FAQ之ArkTS语言(ArkTS-1)
区别如下:自定义构建函数(@Builder)更轻量,其作为UI元素抽象的方法,实现和调用相较于自定义组件比较简洁。在自定义组件中,可以定义成员函数/变量、自定义组件生命周期等。而自定义构建函数(@Builder)不支持定义状态变量和自定义生命周期。在自定义组件中,可直接通过状态变量的改变,来驱动UI的刷新。而自定义构建函数(@Builder)默认的按值参数传递方式不支持动态改变组件,当传递的参数为状态变量时,状态变量的改变不会引起@Builder方法内的UI刷新,要实现UI动态刷新需要。原创 2024-09-06 09:43:58 · 486 阅读 · 0 评论 -
【HarmonyOS NEXT】FAQ之应用框架(ArkUI-17)
可以使用promptAction结合ComponentContent实现自定义分享弹窗。原创 2024-09-05 10:45:10 · 359 阅读 · 0 评论 -
【HarmonyOS NEXT】FAQ之应用框架(ArkUI-16)
比如一个自定义的Component,有20个@State修饰的变量,每个State都定义了相关更新接口,外部某个时机,会批量更新这些State,调用每个State的更新接口,会不会导致频繁更新Component组件,导致性能问题?同时对多个State接口更新不会导致性能问题,因为每个@State都要有去更新UI的能力,一次性批量的修改不会导致一个组件被反复刷多次,在一个Vsync内,对同一个组件的多次标脏只刷新一次。如果状态变量数量过多会影响自定义组件创建耗时。原创 2024-09-05 10:44:40 · 419 阅读 · 0 评论 -
【HarmonyOS NEXT】FAQ之应用框架(ArkUI-15)
Text组件绑定bindSelectionMenu自定义菜单,长按弹出自定义菜单,使用closeSelectionMenu关闭自定义菜单,文本选中状态不会取消。该场景下要取消选中状态可以使用selection重新设置选中区域,在调用closeSelectionMenu关闭自定义菜单时重新设置selection的start、end即可取消选中状态。原创 2024-09-05 10:42:33 · 438 阅读 · 0 评论 -
【HarmonyOS NEXT】FAQ之应用框架(ArkUI-14)
目前策略是不支持自定义图标。原创 2024-09-05 10:42:01 · 440 阅读 · 0 评论 -
【HarmonyOS NEXT】FAQ之应用框架(ArkUI-13)
可以通过@State声明一个状态变量,动态控制customKeyboard属性的值来实现自定义键盘和系统键盘如何切换。当用户执行点击遮障层关闭、左滑/右滑、三键back、键盘ESC关闭交互操作时,如果注册该回调函数,则不会立刻关闭弹窗。在回调函数中可以通过reason得到阻拦关闭弹窗的操作类型,从而根据原因选择是否能关闭弹窗。针对@Component修饰的父子组件,可以通过对象将父组件的属性和事件方法传递给子组件,在子组件中接收父组件的属性,并且在子组件定义父组件的事件。原创 2024-09-05 10:41:29 · 285 阅读 · 0 评论 -
【HarmonyOS NEXT】FAQ之应用框架(ArkUI-12)
ArkUI可以自定义装饰器,示例代码中@decorateKlass为自定义类装饰器,@MyDescriptor为自定义方法装饰器。可使用Record类型,有几个变量就对应几个类型参数。原创 2024-09-05 10:40:50 · 283 阅读 · 0 评论 -
【HarmonyOS NEXT】FAQ之应用框架(ArkUI-11)
目前ArkTs语法不支持这种链式调用,组件本身不是一个class对象,无法像普通对象一样调用方法,只能在组件声明的时候在参数里面,传递回调方法去修改组件的参数,无法直接通过链式调用方法。自定义组件在创建之后,会默认给整个组件外面包裹一层不可见的容器。在声明自定义组件的时候,这些属性和样式是作用在这个不可见容器上。而不是自己作用在内部的根组件上,所以两者效果不同。原创 2024-09-05 10:40:18 · 290 阅读 · 0 评论 -
【HarmonyOS NEXT】FAQ之应用框架(ArkUI-10)
通过@CustomDialog创建两个自定义弹窗。在页面上的Button按钮上设置点击事件,通过调用dialogController.open()方法打开弹窗1。在弹窗1的Button按钮上设置点击事件,通过dialogControllerTwo.open()方法打开第二个弹窗。可以通过给弹窗设置组件转场动画transition来实现自定义组件是struct而不是class,无法储存在容器中。可以将自定义组件封装在Builder函数,通过Builder的封装来完成存储。文档中心。原创 2024-09-05 10:39:30 · 325 阅读 · 0 评论 -
【HarmonyOS NEXT】FAQ之应用框架(ArkUI-9)
系统提供的Tabs暂不支持居左显示,可以通过Scroll和Row组件用来实现一个页签,在onclick事件中通过修改索引值和Tabs组件的索引联动,实现切换效果,同时将Tabs的barHeight置为0。@Watch设计的用途是为了快速的计算,其在UI重新渲染之前执行,不建议在@Watch函数中调用async await,异步行为会延迟组件的重新渲染,可能会导致性能问题。在第一次初始化变量的时候,@Watch绑定的回调函数不会被调用,即认为初始化不是状态变量的改变。原创 2024-08-30 14:50:13 · 810 阅读 · 0 评论 -
【HarmonyOS NEXT】FAQ之应用框架(ArkUI-8)
CustomDialogController在设置弹窗时,maskRect属性可以设置弹窗的偏移量和大小,其中x,y属性控制弹窗的偏移量。这两个属性目前不支持calc。一个页面底部默认显示自定义组件A,点击自定义组件A,则A消失,自定义组件B从底部出现;点击自定义组件B,则组件B消失,A从底部出现。这个效果要如何实现?可以使用transition产生组件转场动画,其参数type用来设置组件变化场景,包括新增和删除;参数translate用来设置转场时的平移效果。原创 2024-08-30 14:48:57 · 870 阅读 · 0 评论 -
【HarmonyOS NEXT】FAQ之应用框架(ArkUI-7)
当前不支持,暂未提供相关接口。Grid组件的默认滑动条scrollBar不支持自定义样式。但是可以通过隐藏默认滑动条,并绑定一个ScrollBar组件,就满足该场景。原创 2024-08-30 14:47:37 · 500 阅读 · 0 评论 -
【HarmonyOS NEXT】FAQ之应用框架(ArkUI-6)
给Text组件设置margin时,可以给上下两个方向设置相同的margin,此时两个组件可以在水平方向对齐,因为相对布局RelativeContainer设置锚点时,是以组件占据的所有空间计算的,包括margin和padding,如果只设置margin-top,锚点设为VerticalAlign.Center,实际锚点位置在Text组件中心点偏上。希望Text和TextInput在竖直方向可以在同一水平线上对齐,当给Text组件设置margin-top后,两个组件没有对齐,Text组件偏下。原创 2024-08-30 14:47:01 · 371 阅读 · 0 评论 -
【HarmonyOS NEXT】FAQ之应用框架(ArkUI-5)
初始化自定义弹窗时,通过alignment参数设置对齐方式,通过offset设置弹窗偏移量。方式一:采用弹窗容器默认样式。在默认样式中,弹窗容器高度自适应子节点,最大可为窗口高度的90%;弹窗容器的宽度根据栅格系统自适应,不跟随子节点变化方式二:当显示设置customStyle为true时,弹窗宽高跟随子节点内容适应。gridCount参数是指弹窗宽度占栅格列数的个数。系统把窗口宽等分,等分的份数即为栅格列数,不同设备栅格列数不同。原创 2024-08-30 14:46:23 · 390 阅读 · 0 评论 -
【HarmonyOS NEXT】FAQ之应用框架(ArkUI-4)
布局会根据元素自身内容设置需要的高度,可以不设置缺省。自定义弹窗的定义和初始化需要用到属于ArkTS的语法内容,必须在ets后缀文件中定义使用,不能在ts后缀文件中定义使用。原创 2024-08-30 14:45:53 · 921 阅读 · 0 评论 -
【HarmonyOS NEXT】FAQ之应用框架(ArkUI-3)
在工程中存放开发者自定义字体资源文件,代码中通过registerFont接口进行自定义字体注册,便可以在文本组件中使用fontFamily属性使用。推荐使用$rawfile方式引用自定义字体资源,资源可放在resources/rawfile目录下。使用@Watch回调来监测状态变量的变化,如果执行回调函数,说明在下一次vysnc信号发送时,使用该状态变量的UI会刷新绘制。原创 2024-08-30 14:45:22 · 323 阅读 · 0 评论 -
【HarmonyOS NEXT】FAQ之应用框架(ArkUI-2)
给List组件设置layoutWeight()属性。@BuilderParam用来装饰指向@Builder方法的变量,开发者可在初始化自定义组件时对此属性进行赋值,为自定义组件增加特定的功能。将被遮挡的导航栏作为SideBarContainer组件的第二个子组件使用,使其成为内容区的一部分,SideBarContainer的侧边栏只会遮挡内容区自身宽度的部分,其余部分可以正常看到。一是组件通用属性的绘制内容,比如背景色,boarder等这类组件属性方法设置的渲染属性,这类属性是可以通过状态变量驱动更新的。原创 2024-08-30 14:44:51 · 896 阅读 · 0 评论 -
【HarmonyOS NEXT】FAQ之应用框架(ArkUI-1)
可以使用@Builder装饰器,也称为“自定义构建函数”。自定义构建函数可以在所属组件的build方法和其他自定义构建函数中调用。原创 2024-08-30 14:43:55 · 561 阅读 · 0 评论 -
【HarmonyOS NEXT】FAQ之应用框架(程序框架-后台任务开发)
A:startWork成功之后,可以通过以下命令验证延迟任务是否申请成功,如果hidumper命令返回结果中包含对应应用的bundleName、abilityName、workId,说明对应workId的延迟任务申请成功。A:同一时刻,一个UIAbility只能申请运行一个长时任务,需要创建多个UIAbility根据不同种类的长时任务分别申请;A:延迟任务申请成功之后,执行延迟任务回调需要等到条件满足之后,为了快速验证延迟任务回调功能是否正确,可以通过以下hidumper命令手动触发延迟任务执行回调。原创 2024-08-29 14:40:15 · 555 阅读 · 0 评论 -
【HarmonyOS NEXT】FAQ之应用框架(程序框架-进程间通信)
A:支持,将服务端的onRemoteMessageRequest函数使用async设置为异步即可。具体可以参考:API参考。中的”重载onRemoteMessageRequest方法异步处理请求示例”。原创 2024-08-29 14:39:15 · 344 阅读 · 0 评论 -
【HarmonyOS NEXT】FAQ之应用框架(程序框架-卡片开发)
相比于JS卡片,ArkTS卡片在能力和场景方面更加丰富,因此无论开发何种用途的卡片,都推荐使用ArkTS卡片,因为它可以提高开发效率并实现动态化。服务卡片:是一种界面展示形式,可以将应用的重要信息或操作前置到卡片,以达到服务直达、减少体验层级的目的。元服务:是系统提供的一种面向未来的服务提供方式,是有独立入口的(用户可通过点击方式直接触发)、免安装的(无需显式安装,由系统程序框架后台安装后即可使用)、可为用户提供一个或多个便捷服务的用户应用程序形态。基于类Web范式JS UI开发的卡片,简称JS卡片。原创 2024-08-29 14:38:07 · 371 阅读 · 0 评论 -
【HarmonyOS NEXT】FAQ之应用框架(程序框架7)
A:在编译构建时,Hvigor会生成BuildProfile类,可以通过该类在运行时获取编译构建参数,BuildProfile.BUILD_MODE_NAME即为编译模式。A:精确定位不可以单独申请,要先申请模糊定位权限后再去申请精确定位权限,而且对于精确定位权限申请的时候,必须和模糊定位权限一起申请。A:服务可以通过进程或线程承载。A:应用市场发布的发布证书,无法通过非应用市场渠道安装,如果需要测试发布证书应用,请使用。A:应用在应用市场更新后,之前已经申请的用户授权的权限,不会再次弹框。原创 2024-08-29 14:37:27 · 274 阅读 · 0 评论 -
【HarmonyOS NEXT】FAQ之应用框架(程序框架6)
A:包产物之间没有差异,签名信息是写在zip的格式里的,所以解压看到的是没区别的。A:当应用需要访问用户的隐私信息或使用系统能力时,例如获取位置信息、访问日历、使用相机拍摄照片或录制视频等,应该向用户请求授权,这部分权限是user_grant权限。A:.p7b的distribution-certificate字段内容在.cer文件中找不到,属于.p7b文件有误,在AGC平台正确操作后重新生成一份.p7b文件即可解决。有在线签名的,会绑定设备id,别的设备安装不了。A:需要,签名变化了就需要先卸载再安装。原创 2024-08-29 14:36:49 · 469 阅读 · 0 评论 -
【HarmonyOS NEXT】FAQ之应用框架(程序框架5)
ApplicationContext在基类Context的基础上提供了订阅应用内应用组件的生命周期的变化、订阅系统内存变化和订阅应用内系统环境的变化的能力,在UIAbility、ExtensionAbility、AbilityStage中均可以获取。在桌面长按任何一张已经添加的卡片,比如:图库和备忘录,在弹出来的菜单中选择“卡片中心”,进入卡片中心页面,可以找到卡片来添加到桌面。应用和元服务,不能共享包名,它们得分别打包,元服务和应用之间是分割开的,也不能共享entry模块。原创 2024-08-29 14:36:19 · 553 阅读 · 0 评论 -
【HarmonyOS NEXT】FAQ之应用框架(程序框架4)
A:如下UIAbility是任务,会在多任务界面显示一个卡片,为了动效一致性,不开放给开发者定制。UIAbility不能用来组合应用内界面,用应用内导航组件Navigation来实现应用内的跳转。原创 2024-08-29 14:35:48 · 571 阅读 · 0 评论 -
【HarmonyOS NEXT】FAQ之应用框架(程序框架3)
隐式Want启动:根据匹配条件由用户选择启动哪一个UIAbility,即不明确指出要启动哪一个UIAbility(abilityName参数未设置),在调用startability()方法时,其入参want中指定了一系列的entities字段和actions字段等参数信息,然后由系统去分析want,并帮助找到合适的UIAbility来启动。A:子进程的崩溃不会直接导致父进程崩溃。A:App资源包是无法直接安装的,需要通过应用市场下载才能安装,最后通过解析App包安装的还是HAP包。原创 2024-08-29 14:35:11 · 847 阅读 · 0 评论 -
【HarmonyOS NEXT】FAQ之应用框架(程序框架2)
A:getContext(this)中的this需要指向组件,所以只需确保自定义类在调用getContext时,传入的参数是指向组件的即可。原创 2024-08-29 14:34:37 · 747 阅读 · 0 评论 -
【HarmonyOS NEXT】FAQ之应用框架(程序框架1)
如果希望在调用terminateSelf()后,让应用在最近任务列表中不保留快照,可以通过在module.json5配置文件中配置removeMissionAfterTerminate为true来实现。A:被调用方使用AbilityContext.terminateSelfWithResult()方法,销毁被调用方UIAbility,传递参数给startAbilityForResult()回调函数。的方式拉起,检查want中abilityName字段是否携带了bundleName做前缀,如果有,请删除。原创 2024-08-29 14:33:37 · 601 阅读 · 0 评论 -
【HarmonyOS NEXT】FAQ之应用框架(Web框架开发6)
A:如下illegal、fraud 禁止访问,没有继续浏览的按钮risk 禁止访问,有继续浏览的按钮warning web内核不会主动拦截,没有继续访问的按钮目前不允许自定义风险访问控制的流程,也没有提供相关回调。原创 2024-08-28 15:27:13 · 570 阅读 · 0 评论 -
【HarmonyOS NEXT】FAQ之应用框架(Web框架开发5)
当拦截到图片请求时,想通过response.setResponseData()方法返回本地沙盒内的图片文件,但是setResponseData方法仅支持string/number/Resource参数,沙盒的图片文件应该如何正确返回给Web使用?A:render进程在webview退出后,会完全销毁,没有内存对象泄露。browser进程(应用进程)在webview退出后,剩余的资源主要为通用线程的共享对象资源,在新建一个webview时会复用这些对象,不会重新创建,这种情况也不会内存泄露。原创 2024-08-28 15:26:37 · 675 阅读 · 0 评论 -
【HarmonyOS NEXT】FAQ之应用框架(Web框架开发4)
A:建议在onControllerAttached回调事件中,使用setCustomUserAgent来设置自定义用户代理。原创 2024-08-28 15:26:02 · 504 阅读 · 0 评论 -
【HarmonyOS NEXT】FAQ之应用框架(Web框架开发3)
A:Web组件可内嵌到可滚动容器(Scroll,List...)中,并通过nestedScroll API指定默认的嵌套滚动模式,api11新增layoutMode API设置web布局模式,跟随系统或自适应布局。传递滑动事件可参考Web组件嵌套滚动,将Web组件内嵌于可滚动容器中,使用nestedScroll属性设置嵌套滚动选项,达到传递滑动事件给原生页面的效果。可以将Vue中的方法挂在到JavaScript脚本的document对象上,实现Vue与JavaScript脚本的交互。原创 2024-08-28 15:25:32 · 571 阅读 · 0 评论 -
【HarmonyOS NEXT】FAQ之应用框架(Web框架开发2)
A:可以将字体文件放在工程rawfile目录下,在H5代码中使用@font-face指定用于显示文本的自定义字体,在指定元素中配置font-family属性设置自定义字体。原创 2024-08-28 15:24:50 · 952 阅读 · 0 评论 -
【HarmonyOS NEXT】FAQ之应用框架(Web框架开发1)
A:设置拦截器时,如果只设置setResponseData,内核将无法识别到这是个HTML文件,需要同时设置setResponseEncoding、setResponseMimeType、setResponseHeader等参数。A:默认UserAgent需要通过WebviewController获取。WebviewController对象必须在Web组件绑定后,才能调用WebviewController上的方法getUserAgent获取默认UserAgent。原创 2024-08-28 15:23:45 · 641 阅读 · 0 评论 -
【HarmonyOS NEXT】FAQ之应用框架(无障碍本地化开发)
A:使用ResourceManager模块的getStringValue方法获取。原创 2024-08-27 14:53:15 · 557 阅读 · 0 评论