• 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进行跳转
Logo

作为“人工智能6S店”的官方数字引擎,为AI开发者与企业提供一个覆盖软硬件全栈、一站式门户。

更多推荐