关于鸿蒙的小知识
2. 给ForEach加一个key,key不包含更新数据的存在-key变化才会销毁和创建。3. Observed/ObjectLink- 可以实现局部刷新也可以实现图片不闪烁。虽然不需要传递上下文,但是必须等到getContext能够获取对象时才可以使用。EntryAbility中的loadContent的回调函数中也可以获取到。1. 图片加一个syncLoad(true) - 不建议用性能差。g
·
- this永远指向它的调用者-谁调用this,这个函数中的this指向谁
- 解决循环中的图片闪烁三种方案
1. 图片加一个syncLoad(true) - 不建议用性能差
2. 给ForEach加一个key,key不包含更新数据的存在-key变化才会销毁和创建
3. Observed/ObjectLink- 可以实现局部刷新也可以实现图片不闪烁
- 传递BuilderParam的时候,可以用箭头函数包裹一个调用builder的函数,此时鸿蒙是允许的
- 尾随闭包当子组件只有一个BuilderParam的时候才可以使用
- class在拥有构造函数的时候必须new,其他情况可以用字面量{}代替
- 使用Provide和Consume名字必须对应,否则模拟器直接崩溃
- class中没有构造函数的时候必须给初始值,有构造函数可以不给
- 鸿蒙中只有Record类型和小写object的类型才可以通过[key值]方式取值
- any在鸿蒙中可以as成任何类型
- 但是不能声明any类型的方法
- 媒体查询坑点:
虽然不需要传递上下文,但是必须等到getContext能够获取对象时才可以使用
getContext()- 页面一定可以获到
EntryAbility中的loadContent的回调函数中也可以获取到
- 引用其他模块的依赖关系在当前模块 oh-package.json
- 安全组件-比如获取定位-不需要获取权限-华为开了个小后门,华为保证它的安全
- 假设通过鸿蒙的picker来选择照片/视频-是不需要权限的
- router最多能跳32层!!!
- 鸿蒙文档上推荐的东西并不一定是我们最佳的选择!!!
- 一个ability是一个统一的上下文,两个不同的窗口两个上下文
- 返回值如果是Promise<xxx>那就是异步,如果没有那就是同步
- 上下文-在页面中通过getContext- 在ability中通过this.context
- Preview修饰符在预览器中显示是因为 不能有ObjectLink/Link/Consume
- 传递ObjectLink的时候不能采用es6的省略写法
- 鸿蒙中-只要包含Link就是双向,只要包含Prop, 那就是单向
- 第一层-第一层-第一层!!!!!!!!!!
- Prop/Link/ObjectLink/Consume/BuilderParam都不能出现在Entry修饰的组件上(Entry已经是顶级组件了)
- Consume也不能给初始值
- 不能用在循环组件的传值上- 循环中采用ObjectLink和Observed来使用
- Link修饰不能给初始值
- Prop修饰符可以给初始值也可以不给
- Prop的修饰符会对初始数据进行拷贝,State修饰符不会
- 在build函数中通过条件判断创建和销毁组件只能通过if/else
- Styles修饰符不能抽提到其他文件,不能导入导出,不能使用非公共属性之外的属性
- 全局的函数必须用funciton来声明,不能使用箭头函数
- 图片只有svg能够填充颜色
- State只会监测对象类型的第一层数据的变化!!!
- 如果要使用沙箱中的资源必须加上file://
- router跳转之前一定要把pages前面的斜杠去掉
- 祖宗们记住了鸿蒙所有的基础类型都是小写string/boolean/number/object
- 鸿蒙会有三种包Hap(有Ability)-entry, Hsp-shared, Har-har 类型不同
- 开发鸿蒙期间关掉各种网络的代理工具
- 鸿蒙操作系统的应用必须只能从华为应用市场下载-没有任何位置可以安装
- ArkTS + 仓颉 开发鸿蒙的主力语言, 仓颉还未真正开发应用-PC鸿蒙-专业高性能软件
- 鸿蒙4.0之前的版本用的是Java和js语言开发,等到4.0-Next变成ArkTS
- 目前最新的API是API12,目前是鸿蒙星河版,也就是鸿蒙Next版本
- Beta版本很不稳定,更新频率极快-作为槽点。
- 目前API12的系统只有三款机型可用Meta60 Meta60Pro MetaX5
- 鸿蒙Next系统需要经过华为审核才可以推送系统,需要去华为官网申请-https://developer.huawei.com/consumer/cn/activity/- 官网不定期开放申请名额,假如已过申请期,需要等待
- 开发鸿蒙应用需要具有华为开发者账号,必须通过实名认证,选择个人即可
- 下载开发工具地址-https://developer.huawei.com/consumer/cn/download
- 开发工具更新频率极其快速,一个月按照2-3次的更新迭代速度在更新
- 开发工具的模拟器需要开发者提起用户申请,大约半个工作日审核通过-内容正常填即可
- 模拟器的运行不需要签名证书指纹
- 真机运行项目必须要有签名证书指纹
- 真机可用自动生成证书指纹运行
- windows模拟器和macArm模拟器的差别,windows模拟器不能使用华为登录,不能使用地图,mac(Intel)模拟器同样不能使用地图和华为登录
- 预览器和模拟器效果出现差异,以模拟器为最终效果,预览器可以理解为一个测试UI效果的,不用开启模拟器的效果
- 鸿蒙是脱离安卓的一套全新的操作系统,和安卓系统不兼容,所有的安卓代码均不可运行在鸿蒙操作系统上
- 鸿蒙分开源鸿蒙和闭源鸿蒙,开源鸿蒙叫做OpenHarmony(开放原子基金会),闭源鸿蒙叫做HarmonyOS(华为公司)
- 所有的问题都可以通过华为官方文档去寻找解释和解决方案
- 如果找不到或者发现了鸿蒙的bug,可以给华为官方提工单,响应时间约1-2工作日-https://developer.huawei.com/consumer/cn/personalcenter/myCustom/ticketlist
- 很多解决方案都可以在华为的FAQ上寻找解释和解决方案-https://developer.huawei.com/consumer/cn/doc/harmonyos-faqs-V5/faqs-ux-design-V5?catalogVersion=V5
- 鸿蒙操作系统最大的特性是一次开发多端部署,即一套代码可以运行在各种搭载鸿蒙操作系统的设备上,所谓1 + 8 + N,并基于此实现万物互联
- 鸿蒙的主力开发语言是ArkTS + ArkUI,新开放的仓颉语言目前还在内测中,还未成为主力语言
- ArkTS严格意义上并不是TS,但是借鉴了大部分TS的特性,但是极大加强了TS的类型约束,TS的几乎绝大部份的动态类型特性在ArkTS中被禁止
- ArkTS推崇用class或者interface来声明对于对象的类型描述
- ArkTS中禁止使用字面量类型来声明如。type Person = { name: string; age: number }
- 所有通过路由跳转的页面即被Entry修饰符的struct必须在 resources/base/profile/main_page.json中声明
- 通过router跳转时,必须去掉pages前面的斜杠
- 在鸿蒙中有vp、fp、px、lpx集中度量单位,vp和fp基本一致都是虚拟像素,px是真正的物理像素
- Preview修饰的组件可以在预览期中预览,但是只能预览效果,没有交互
- 所有的组件都必须使用struct结构体来声明
- 所有的系统组件都有appear和disAppear两个事件
- 所有的组件都有aboutToAppear和aboutToDisapper事件
- Entry修饰的组件表示为页面,除了以上的两个事件之外,还具有onPageShow onPageHide和onBackPress事件
- 默认情况下,手机屏幕会自动让出上下的安全区,可以采用全局设置或者采用组件的扩展安全区的方式来实现
- 弹层的有,bindSheet bindContentCover 模态方式,CustomDialog修饰的组件进行open和close,还有ArkUI系统自带的集中弹窗,如日期弹窗,时间弹窗,确认弹窗,消息提示
- CustomDialog修饰的组件中必须有一个controller,类型为CustomDialogController
- CustomDialog修饰的组件每次open和close都是创建和销毁组件
- 以上弹窗方式都是基于UI进行的,有的项目想要单独封装单例模式弹窗,可以采用窗口(window)的方式来进行,窗口需要创建,可以全屏,也可以调整大小,可以调整位置,可以销毁
- 鸿蒙的布局方式大概有以下几种,线性布局,弹性布局,Grid布局,堆叠布局,相对布局
- 上下文Context是贯穿当前ability的,也就是当前的一个窗口下的所有内容都共享一个上下文,但是在ability创建的时候无法通过getContext获取上下文,需要通过this.context获取上下文
- 通信方式大概有- 父子单向-父子双向-隔代组件传值, 页面传值,跨ability通信传值
- 性能优化大概从 分模块开发(三层架构)- 相对布局容器拍平组件层级结构- 多线程处理耗时任何几个维度来处理-LazyForEach/Repeat(还未开发完毕)处理列表
- 鸿蒙的请求工具 目前官方有两个 http-rcp,rcp更像第三方的axios, 目前http和axios是企业的主力开发工具
- 解决图片闪屏大概有 给Image赋值syncLoad(true)-ObjectLink(局部更新)- 保持循环key不变三种解决方案
- 滚动出现能出现在以下几种组件-Scroll(只能有一个子组件)-List-Grid-WaterFlow-Swiper
- List/Swiper都有缓存属性,cacheCount 默认值为1,可以设置默认缓存数量,提前让渲染内容创建
- LazyForeach只能用在存在滚动容器的几个组件,如List/Grid/WaterFlow(具体参见文档)
- build函数可以没有子组件,但是有的话,只能有且只能有一个可容纳子组件的组件
- build函数在aboutToAppear后执行
- router.push或者navPathStack.pushPathByName() 之后,原页面并不会销毁,压栈会盖在当前页面上
- 操作权限分为系统权限和用户权限
- 系统权限如网络权限只需要填写配置即可,用户权限除填写配置外,还需要经过用户同意
- 拉起第三方的应用或者本应用的ability采用startAbility,需要对应的包名,abilityName和其他应有参数(want信息)
- 只有hap包才可以有ability
- hsp可以有页面,可以预览
- har可以有页面,但是不能用,鸡肋
- entry类型的包是应用入口
- 如果一个hap包引用了多个hsp,需要在hap的oh-package.json中填写对应的路径依赖
- 如果一个hap包引用了多个hsp,运行模拟器的时候,需要添加部署多包
- 如果一个hap,引用了har,har会被拷贝在hap中,即har会被拷贝,而hsp只会引用
- 性能优先,采用hap+har
- 体积优先,采用hap+ hsp
- 一个应用可以有多个hap, hap又分entry和features类型的,如果你两个entry的hap, 前一个勾选了手机/手表,另外一个entry类型的hap只能勾选手机/手表之外的设备,features类型的hap就是支持ability的模块,原则上可以无限多,具体根据业务而定
- 最终上线到agc的是一个.app文件,鸿蒙会根据你的hap的勾选的设备类型给你分发到不同的设备上
- 最终运行在我们的手机上的是.hap包
- har包可以发布到ohpm上作为共有仓库
- hsp不可以发布,只可以本地使用
- 一个个人开发者最多只能有两个调试证书和一个发布证书
- 华为地图的定位需要GCJ02的坐标,但是华为的定位返回的WGS84的坐标,需要使用华为提供的转化类转化
- 播放声音可以采用最简单的Video组件,Video组件可以绑定一个controller,对行为进行控制
- 可以采用AvPlayer或者SoundPool播放声音
- 录制音频播放音频一般采用AudoCapurer和AudioRenderder来实现PCM的录制和播放
- PCM的录制和播放就是把声音采集器采集的buffer一段段的写入沙箱文件,并一段段的拿出来交给声道
- 除了以上鸿蒙还提供一种简单的方式来录制音频,用avplayer来播放,
- 相机的开发,专业级的开发需要参照文档(极其复杂),简单的应用直接使用picker模式即可,不需要权限的申请,可以录制音频和视频,并拿到对应的路径
- 混合开发的通信方式有两种,1, 创建端口模式,创建两个端口,给一个到html,html用来和网页通信,
- 2,采用javascriptProxy给html注入全局对象,或者用controller给网页注入全局对象
- 沙箱目录是唯一鸿蒙提供给开发者可操作的目录,有cache/files/...等目录
- cache沙箱目录系统会自动清理,上传的图片必须在这个里面
- 上传的图片必须来自沙箱目录cache目录下,通过http的onHeaderReceive来接收参数
- 下载图片直接使用request.downLoadFile直接将图片写入沙箱目录
- 沙箱目录的文件要想显示在Image上或者读取,必须加上文件协议file://
- 鸿蒙官方问上的fd://35中的35指的是通过fs读取的文件对象的fd属性
- taskPool和worker的多线程都必须保证线程安全,不能有闭包变量
- taskPool和worker的多线程都必须要在多线程中把事情做完,再传递到外面
- worker目前系统支持最多64个,注意使用完毕要销毁 close
- taskPool执行的函数必须是全局函数,必须使用Concurrent修饰
- taskPool可以设置执行任何的优先级,默认为中级
- Builder修饰符修饰的函数如果想要响应式更新,必须传入对象形式,值类型模式不具体响应式
- 当使用BuilderParam的时候,如果子组件只有一个BuilderParam,可以采用尾随闭包模式
- Builder修饰的函数最外层组件不能是一个自定义组件
- 自定义组件中的build函数如果有的话,只能是一个根组件,没有必须包含子组件的限制
- Navigation组件的路由模式和Relative相对容器目前是华为系工作最推荐的
- Navigation组件模式天然支持一多模式
- NavDestination组件有八个钩子函数
- Navigation的路由模式下所有路由页面都必须被NavDestination包裹
- 华为登录本质上就是利用华为的账号体系,客户端只需要拿到换取的code传递给我们的后台即可
- 动画有很多种模式,常用的有animation属性(属性必须有变化)animationTo(闭包函数) ImageAnimtor(图片帧动画) 共享动画等
- 通过startAbility拉起另外一个ability,第一次会进入onCreate-onWindowStateCreate-onForeground,走创建流程,第二次如果之前ability未销毁,会进入onNewWant钩子中,可通过这个钩子获取参数
- AppStorage/LocalStorage都是内存数据
- AppStorage的作用范围是整个应用
- PersistentStorage可以将数据进行持久化,但是只能等到UI渲染开始,所以想要在ability中判断持久化数据,应该使用首选项
- 目前首选项的数据value的大小是16M左右,可以把首选项当作小型数据库
- 首选项可以在ability初始化时拿到内容,因为在abilty中通过首选项判断是否登录过最为合适
- 获取屏幕宽度有几种方式,1.通过onAreaChange监听最外层的变化,拿到高度
- 通过display的Kit能力获取当前屏幕的高宽
- onAreaChange可以监听任意组件的区域变化,拿到组件的宽高位置等
- px和vp的互相转化华为有默认的全局方式 px2vp vp2px
- router跳转hsp有两种方式,第一种 拼全局路径 bundle:/包名/模块名/路径名
- 第二种-添加对应以来,采用import引入对应页面,给页面添加routerName属性,通过router.pushRouteByName进行跳转
更多推荐




所有评论(0)