#鸿蒙学习大百科#在并发场景下,AES总是加密失败,怎么办?
出现这种情况,可能是使用HUKS重复导入相同的密钥,importKey会判断密钥是否存在,存在的话会删除重新生成,结果删除之后其他线程做init失败。如果使用HUKS相同密钥只用导入一次,系统会安全存储密钥,使用密钥别名进行密码学操作。如果不需要系统保存密钥的场景可以使用cryptoFramework。
#鸿蒙学习大百科#卡片开发中可以做到数据持久化吗?
可以的,卡片开发中数据持久化方式包括用户首选项、键值型数据库、关系型数据库。用户首选项(Preferences):应用存入数据到Preferences实例后,可以使用flush()方法实现数据持久化。键值型数据库(KVStore):调用put()方法向键值数据库中插入数据。关系型数据库(RelationalStore):获取到RdbStore后,调用insert()接口插入数据。
#鸿蒙学习大百科#将app.media.app_icon,转换为PixelMap,怎么操作?
通常采用getMediaContent,获取指定资源ID对应的媒体文件内容,然后用image的createPixelMap创建PixelMap。具体代码如下:import{image}from'kit.ImageKit'try{媒体文件字节数组getContext().resourceManager.getMediaContent($r('app.media.icon').id,(error,value:ArrayBuffer)>{letopts:image.InitializationOptions{editable:true,pixelFormat:3,size:{height:4,width:6}}创建PixelMapimage.createPixelMap(value,opts).then((pixelmap)>{...})});}catch(error){console.error(callbackgetMediaContentfailed,errorcode:${error.code},message:${error.message}.)}
#鸿蒙学习大百科#系统、三方、预置这三种应用有哪些区别?
预置应用比较好理解,就是厂商在出厂时预先安装在设备上的应用,系统或三方应用都可以。profile证书中appfeature为hossystemapp的应用为系统应用,其能调用系统接口。profile证书中appfeature为hosnormalapp的应用为三方应用,其不能调用系统接口。
#鸿蒙学习大百科#在开发过程中,一个或多个UIAbility要怎么选择?
对于这个问题,我们首先要知道UIAbility的定义,它是系统调度的基本单元,为应用提供绘制界面的窗口。也就是说每一个UIAbility组件实例都会在最近任务列表中显示一个对应的任务。一个应用可以包含一个或多个UIAbility组件。如果你想在任务视图中看到一个任务,则建议使用一个UIAbility,多个页面的方式。如果你想在任务视图中看到多个任务,或者需要同时开启多个窗口,则建议使用多个UIAbility开发不同的模块功能。
#鸿蒙学习大百科#当import依赖树相对较大时候,如何进行调优?
克服依赖相对较大的难题,可采用动态加载。ArkCompiler支持动态import方法,支持运行时阶段动态加载模块。通过import()接收一个模块路径作为参数,返回一个Promise对象。当Promise对象被resolve时,使用then()方法获取模块的默认导出。代码示例:try{import('.Index').then(module>{在需要时使用所需模块的代码...})}catch(error){...}
#鸿蒙学习大百科#当设备横竖屏的状态发生改变时候,如何获取消息?
一般来说,订阅系统环境变量的变化可以有这些方法获取消息:使用ApplicationContext订阅回调、在AbilityStage组件容器中订阅回调、在UIAbility组件中订阅回调、在ExtensionAbility组件中订阅回调。在onConfigurationUpdate()回调方法中订阅或监听系统环境变量的变化(包括语言,颜色模式,屏幕方向等)。
#鸿蒙学习大百科#如何保证代码安全?如果从包管理入手的话
可以通过编译、打包、安装、运行时这四步骤来实现。HAR、HSP在编译构建时支持代码混淆的功能。每个HSPHAP单独签名,只有签名后的应用才允许安装。终端设备用户终端设备上需要使用应用市场进行安装和卸载,无法通过其他方式安装。提供应用沙箱机制,它是一种以安全防护为目的的隔离机制,避免数据受到恶意路径穿越访问。
#鸿蒙学习大百科#如何实现布局的自适应折行?
EntryComponentstructIndex{Stateimgs:Resource[][$r("app.media.appicon"),$r("app.media.appicon"),$r("app.media.appicon"),$r("app.media.appicon"),$r("app.media.appicon"),$r("app.media.appicon")]build(){Column(){Flex({wrap:FlexWrap.Wrap,direction:FlexDirection.Row}){ForEach(this.imgs,(item:Resource)>{Image(item).width(100).height(80).margin(20)})}}.height('100%').width('100%')}}
#鸿蒙学习大百科#如何实现父组件尺寸发生变化,但是子组件的宽高比不变化?
EntryComponentstructIndex{build(){Column(){Column(){Image($r("app.media.appicon")).width("50%").height("50%")}.aspectRatio(1)让子组件的宽高比保持不变}.height('100%').width('100%')}}
#鸿蒙学习大百科#如何让Swiper露出前面一部分和后面一部分以便于让用户理解此控件可以滑动?
EntryComponentstructIndex{build(){Column(){Swiper(){Text().width("100%").height(200).backgroundColor(Color.Blue).margin(5)Text().width("100%").height(200).backgroundColor(Color.Yellow).margin(5)Text().width("100%").height(200).backgroundColor(Color.Pink).margin(5)}.prevMargin(30)露出前面的尺寸.nextMargin(30)露出后面的尺寸}.height('100%').width('100%')}}
#鸿蒙学习大百科#如何根据自己的实际场景自定义断点范围?
breakpoints自定义修改断点的取值范围,最多支持6个。GridRow({columns:{xs:4,sm:4,md:8,lg:12},gutter:0,自定义断点,启用了5个断点,0100v为xs,100200vp为sm,200300vp为md300400vp为lg,大于400vp为xlbreakpoints:{value:["100vp","200vp","300vp","400vp"]}}){}