自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(29)
  • 收藏
  • 关注

原创 鸿蒙(HarmonyOS)实战开发篇——基于List的滑动过程卡顿率问题分析&案例

以大于300mm/s的速度,连续3次,每次半屏。List组件的抛滑过程,可以通过应用进程下的H:APP_LIST_FLING泳道标识。性能衡量的起点为第一次抛滑开始点,衡量的结束点为第三次抛滑的结束点。Tip:尾动效阶段系统会进行降帧处理,所以如果统计卡顿率的情况,通常只会统计从抛滑开始到尾动效起点的这一阶段。

2024-09-27 22:14:32 256

原创 鸿蒙(HarmonyOS)实战开发篇——基于ArkUI的冷启动加载完成时延问题分析思路&案例

冷启动加载完成时延的性能衡量的起点:点击应用图标离手冷启动加载完成时延的性能衡量的终点:应用的首页所有的占位符加载完成。

2024-09-27 21:23:31 439

原创 鸿蒙(HarmonyOS)实战开发篇——关于图像撕裂、掉帧等异常现象的原理以及优化方案

另外也可以看出来期间存在CPU资源浪费,双缓冲只会提供两个Buffer,B被GPU处理占用,A正在用显示,那么在第二个16ms里面,CPU就无法获取到Buffer处理UI更新,在Jank的阶段空空等待。GPU 开辟A、B两个缓冲区,并对缓冲区进行同步加锁处理,执行流程就是当A缓冲区拿到第一帧数据,就给A缓冲区加上一把锁,屏幕控制器从A拿到数据并逐行扫描完成,A帧缓冲区解锁,并把屏幕控制器指向B缓冲区,B缓冲区加锁并逐行扫描显示,在屏幕控制器扫描B缓冲区的时候,A缓冲区拿到GPU传过来的新数据,以此类推。

2024-09-27 20:28:52 379

原创 鸿蒙(HarmonyOS)实战开发篇——折叠屏扫描二维码方案

自定义界面扫码使用系统能力customScan,其提供相机流的初始化、启动扫码、识别、停止扫码、释放相机流资源等能力。5.折叠屏设备上,依赖display的屏幕状态事件,监听屏幕折叠状态变更,通过对折叠状态的分析,更新XComponent尺寸并重新启动扫码服务。3.二维码识别通过customScan系统能力在启动扫描之后,通过异步任务监控相机图像,对识别到的内容直接返回处理。4.识别到的数据为一个结果数组,每一个结果包括识别到的码源信息和二维码图像所在屏幕的坐标。1.相机权限需要用户授权。

2024-09-27 17:58:37 192

原创 鸿蒙(HarmonyOS)实战开发篇——图片选择和下载保存案例

本示例介绍图片相关场景的使用:包含访问手机相册图片、选择预览图片并显示选择的图片到当前页面,下载并保存网络图片到手机相册或到指定用户目录两个场景。2.通过photoViewPicker.select()接口,通过传入参数PhotoSaveOptions图库对象,获取返回的用户选择的图片信息。通过photoViewPicker.select()拉起图库界面,用户可以预览并选择一个或多个文件,即可实现拉起手机相册并进行图片的预览与选择。1.创建文件类型为图片的,并最大预览数量为2的图库实例。

2024-09-27 17:35:44 113

原创 鸿蒙(HarmonyOS)实战开发篇——基于加解密算法框架的常见规格问题

2、对于安卓加密的密文,HarmonyOS这边的格式是ASN.1包裹的格式,因此HarmonyOS这边解密的时候,需要先序列化:HexStrTouint8Array(new SM2_Ciphertext().i2d_SM2_Ciphertext(“安卓的密文”));对于GCM的参数设置,这里给了IV的,其余参数参考IV的写法即可。1、对于传入的密钥中公钥是带04的的十六进制的130位字符串,在传入的时候,密钥参数对应的格式为 04+x+y,x和y的长度是一致的,私钥的十六进制就直接放入对应的参数即可。

2024-09-27 16:29:24 457

原创 鸿蒙(HarmonyOS)实战开发篇——Native保存图片到应用沙箱

当前编译后加载libcurl.so时,通过hilog日志发现依赖了libcurl.so libcurl.so.4 libnghttp2.so libnghttp2.so.14 libzstd.so几个so文件。5.在Native的saveImageOfInternetCallback接口中通过调用libcurlDownload.so的接口将网络图片写入沙箱。2.将开源库libcurl相关的so文件以及封装了libcurl下载功能的libcurlDownload.so放入模块下的libs相应目录。

2024-09-27 16:10:30 326

原创 鸿蒙(HarmonyOS)实战开发篇——基于ArkUI现有能力实现自定义弹窗封装方案

从下往上的抽屉式弹出、关闭时从上往下收回。

2024-09-27 15:39:26 604

原创 鸿蒙(HarmonyOS)实战开发篇——基于子窗口实现应用内悬浮窗

app应用会使用悬浮窗/悬浮球的方式来给用户展示一些应用重要&便捷功能的入口,类似android和iOS应用中常见的应用内可拖拽的悬浮球和小窗口视频悬浮窗,点击悬浮窗修改悬浮窗样式和响应事件跳转页面,在跳转页面后依然可以显示在屏幕中上个页面拖拽后的固定位置等。:可响应正常点击事件,可通过触发拖动使悬浮窗的移动,根据最后手势停留位置,做动画靠屏幕左或靠右显示,跳转和返回上级页面后悬浮窗依然存在,且相对手机屏幕位置不变。:悬浮窗的窗口大小自适应组件,子窗口中页面设置了宽高,需要让子窗口自适应页面组件大小。

2024-09-27 14:27:40 411

原创 鸿蒙(HarmonyOS)实战开发篇——基于原生能力的键盘控制

点击生命周期输入框,通过windowStage.getMainWindowSync().getUIContext().setKeyboardAvoidMode,实现设置窗口在键盘抬起时的页面避让模式,这种情况下当键盘弹起的时候页面会自动压缩。监听键盘高度,在键盘弹出后让组件上移,键盘收起后让组件恢复,这种做法定制化程度更高,可以根据开发者需要自行控制页面避让的高度。应用通常使用键盘的方式,系统键盘的弹出收起,获焦失焦,高度监听,安全避让等。:监听键盘高度,在键盘弹出后让组件上移,键盘收起后让组件恢复。

2024-09-27 13:47:52 445

原创 鸿蒙(HarmonyOS)实战开发篇——基于List和Scroller由简单到复杂列表布局开发实践

3.下部分Row组件2(List组件1 + Scroll组件(List组件2)),List组件1渲染每条信息的头部,内部用ListItemGroup进行分组渲染,竖向滚动;2.上部分Row组件1(Column组件+ List组件0),Column组件用来布局固定信息,List组件0用来渲染底部内容区域表头,与下部分List组件3+进行联动滚动,如股票参数,车型列表。4.List组件2作为内容数据容器,ListItem中嵌套List组件3+横向滚动,联动List组件0进行横向滚动。

2024-09-26 21:55:49 392

原创 鸿蒙(HarmonyOS)实战开发篇——如何在HarmonyOS中实现AOP(代码插桩)能力?

接口介绍: Aspect 类用于封装提供切面能力(Aspect Oriented Programming,简写AOP)的接口,这些接口可以用来对类方法进行前后插桩或者替换实现。

2024-09-26 21:16:11 683

原创 鸿蒙(HarmonyOS)实战开发篇——数据库版本升级案例

4. 版本恢复下的按钮会在升级至V1以上版本时可点击,如步骤二中升级至V2版本后,则”恢复到V1“按钮可点击,点击后数据库版本回退至V1版本。3. 点击版本升级下的”升级至V3“按钮,若当前是V1版本,则会执行V1升级至V3的逻辑,且在表格处显示V1和V3版本表格字段对比。2. 点击版本升级下的”升级至V2“按钮,则数据库版本会从V1升级至V2,且在表格处显示V1和V2版本表格字段对比。方案二:一步一步升级到最新版本,只需要实现紧邻版本的升级逻辑,优点在于逻辑简单,便于维护,缺点在于比方案一性能差。

2024-09-26 20:18:53 337

原创 鸿蒙(HarmonyOS)实战开发篇——基于原生的跨模块资源访问

对于“color”、“float”、“string”、“plural”、“media”、“profile”等类型的资源,通过"$r(‘app.type.name’)"形式引用。说明:hsp包名必须写在[]内,”rawfile“下有多层目录,需要从”rawfile“下面第一个目录开始写,如"$ rawfile(‘[hsp].oneFile/twoFile/icon.png’) ",使用“4.引用har包,在引用方oh-package.json5下添加依赖,依赖需要到.har文件,执行install。

2024-09-26 17:23:18 410

原创 鸿蒙(HarmonyOS)实战开发篇——基于设置应用的应用权限、通知设置跳转

场景二:当用户使用一些需要用户授权的api时(如访问获取联系人信息),若用户首次拒绝授权,则需要引导用户到权限设置页面能够主动进行应用权限的修改。当用户使用一些需要用户授权的api时(如访问获取联系人信息),若用户首次拒绝授权,则需要引导用户到权限设置页面能够主动进行应用权限的修改。引导用户跳转到系统设置页进行权限,通知的相关设置,类似android和iOS应用中常见的应用内跳转到设置进行通知开启或权限设置的操作。暂无直接跳转权限管理的方式,可通过跳转至应用详情进行用户申请权限的修改。

2024-09-26 16:47:24 348

原创 鸿蒙(HarmonyOS)实战开发篇——ArkTS多线程的多线程系列(五):通过子线程实现全局弹窗

我们知道弹窗只能在UI主线程弹出,因此最简单的处理方法是将需要弹窗的类型、弹窗内容都通过子线程发送到主线程,这样主线程再根据不同弹窗类型进行弹窗。

2024-09-26 16:21:43 328

原创 鸿蒙(HarmonyOS)实战开发篇——ArkTS多线程的多线程系列(四):基于生产者-消费者实现多线程协同

生产者-消费者模式是一种经典的多线程设计模式,它为多线程间的协同提供了良好的解决方案。在生产者-消费者模式中,通常有两类线程,即若干个生产者线程和若干个消费者线程。生产者线程负责提交用户请求,消费线程负责具体处理生产者提交的任务。生产者和消费者直接则通过共享内存缓冲区进行通信。从图中可以得看出生产者-消费者模式的如下优点性能提升:将一个耗时的流程拆成生产和消费两个阶段。业务解耦:共享内存缓冲区作为生产者线程和消费者线程间的通信桥梁,避免了生产者线程与消费者线程直接通信,从而将两类线程进行解耦。

2024-09-26 15:43:13 537

原创 鸿蒙(HarmonyOS)实战开发篇——ArkTS多线性的多线程系列(三):基于单例实现跨线程缓存

单例是设计模式使用最为普遍的模式之一。它是一种对象创建模式,用于产生一个对象的具体实例,它可以确保系统中(单进程),一个类只产生一个实例。它的优势在于:对于频繁使用的对象,可以省略new操作花费的时间,这对于那些重量级对象而言,是非常可观的一笔系统开销;由于new操作的次数减少,因此对系统内存的使用频率也会降低,这样将减少GC压力。严格来说单例模式与并行没有直接的关系,是因为它太常见了,在应用开发的过程中将不可避免的会在多线程环境中使用到它。

2024-09-26 15:10:49 217

原创 鸿蒙(HarmonyOS)实战开发篇——ArkTS多线程的多线程系列(二):基于Sendable共享对象实现跨线程通信及UI状态刷新

通过Sendable构建可跨线程共享的对象DownloadVideoInfo;主线程通过构建new taskpool.Task(downloadVideo, this.dvi)将DownloadVideoInfo共享对象同步给子线程(this.dvi是DownloadVideoInfo对象实例,downloadVideo是通过@Concurrent修饰的多线程任务);当点击启动时,通过taskpool.execute()方法启动子线程;

2024-09-26 15:04:18 603

原创 鸿蒙(HarmonyOS)实战开发篇——ArkTS多线程的多线程系列(一):ArkTS多线能力入门

在单线程中执行的代码都是串行的,即按顺序执行,直到执行完成后,程序才会退出。当程序需要执行多个任务时,每个任务必须等待前一个任务执行完成后才能继续执行,这使得程序的性能非常低下。多线程技术通过使用多个线程来充分利用CPU资源,同时执行多个任务,从而提高程序执行的效率。每个线程都是相互独立的,并能够单独执行、暂停、继续和停止。进程(Process):是操作系统进行资源分配的最小单元。线程(Thread):是操作系统进行运算调度的最小单元,它被包含在进程之中,是进程中的实际运作单位。

2024-09-26 13:45:30 541

原创 鸿蒙(HarmonyOS)实战开发篇——基于Web组件的H5页面切换类点击操作响应时延问题分析思路&案例

响应起点:手指点击抬手离开屏幕响应终点:肉眼看到屏幕变化的第一帧响应时延:两处时间差值3.问题定位流程3.1 通用前置流程3.1.1 查看操作录屏辅助定位处理三方应用问题时,可以优先查看操作录屏,查看操作场景,看能否发现一些有助于定位的信息,比如1、是否有转场动效,初始动效是否明显2、页面组件是否复杂3.1.2 Trace抓取trace抓取参考:【附录1:【Web组件的H5页面切换类点击操作】抓取trace】

2024-09-25 22:23:17 651

原创 鸿蒙(HarmonyOS)实战开发篇——基于List的滑动丢帧性能问题分析思路&案例

以大于300mm/s的速度,连续3次抛滑,每次半屏。抓取滑动过程Trace,查看Frame泳道中应用进程和RenderService的最大连续丢帧数。List组件的抛滑过程,可以通过应用进程下的H:APP_LIST_FLING泳道标识。性能衡量的起点为第一次抛滑开始点,衡量的结束点为第三次抛滑的结束点。

2024-09-25 21:54:22 533

原创 鸿蒙(HarmonyOS)实战开发篇——冷启动响应时延问题分析思路&案例

冷启动响应时延推荐时间:85ms。

2024-09-25 20:29:33 625

原创 鸿蒙(HarmonyOS)实战开发篇—折叠屏扫描二维码方案

自定义界面扫码使用系统能力customScan,其提供相机流的初始化、启动扫码、识别、停止扫码、释放相机流资源等能力。5.折叠屏设备上,依赖display的屏幕状态事件,监听屏幕折叠状态变更,通过对折叠状态的分析,更新XComponent尺寸并重新启动扫码服务。3.二维码识别通过customScan系统能力在启动扫描之后,通过异步任务监控相机图像,对识别到的内容直接返回处理。4.识别到的数据为一个结果数组,每一个结果包括识别到的码源信息和二维码图像所在屏幕的坐标。1.相机权限需要用户授权。

2024-09-25 17:43:00 242

原创 鸿蒙(HarmonyOS)实战开发篇——基于子窗口实现应用内悬浮窗

app应用会使用悬浮窗/悬浮球的方式来给用户展示一些应用重要&便捷功能的入口,类似android和iOS应用中常见的应用内可拖拽的悬浮球和小窗口视频悬浮窗,点击悬浮窗修改悬浮窗样式和响应事件跳转页面,在跳转页面后依然可以显示在屏幕中上个页面拖拽后的固定位置等。:可响应正常点击事件,可通过触发拖动使悬浮窗的移动,根据最后手势停留位置,做动画靠屏幕左或靠右显示,跳转和返回上级页面后悬浮窗依然存在,且相对手机屏幕位置不变。:悬浮窗的窗口大小自适应组件,子窗口中页面设置了宽高,需要让子窗口自适应页面组件大小。

2024-09-25 16:55:07 829

原创 鸿蒙(HarmonyOS)实战开发篇——基于ArkUI现有能力实现自定义弹窗封装方案

从下往上的抽屉式弹出、关闭时从上往下收回。

2024-09-25 16:20:41 301

原创 鸿蒙(HarmonyOS)实战开发篇——基于Taskpool的多线程操作

定时器3秒超时(仅仅执行一次)后,就会进入TimerOutHandle函数处理,TimerOutHandle函数体中,通过taskpool创建异步并发任务执行业务。定时器每3秒超时一次,进入TimerOutHandle函数处理,TimerOutHandle函数体中,通过taskpool创建异步并发任务执行业务。task1依赖task2,task2依赖task3,上面任务执行的顺序是:task3执行完毕后再执行task2,最后执行task。task1执行完毕后,执行task2,最后是task3执行完毕。

2024-09-25 15:44:46 810

原创 鸿蒙(HarmonyOS)实战开发篇——基于Napi调用ArkTS/系统接口

场景二: 系统仅提供了ArkTS 异步接口,未提供对应的NDK接口,当伙伴使用C++ 代码实现业务逻辑时,部分系统能力需要依赖系统ArkTS 异步接口;系统仅提供了ArkTS 异步接口,未提供对应的NDK接口,当伙伴使用C++ 代码实现业务逻辑时,部分系统能力需要依赖系统ArkTS 异步接口;场景一:系统提供了ArkTS 接口,但未提供对应的NDK接口,当伙伴使用C++ 代码实现业务逻辑时,部分系统能力需要依赖系统ArkTS接口;通过创建线程安全函数的方式 调用系统的异步接口。例如: 获取设备的屏幕宽高。

2024-09-25 14:32:00 552

原创 鸿蒙(HarmonyOS)组件化路由框架——Navigation的路由管理

Navigation由NavDestination组件组成页面路由,在实现过程中NavDestination组件会被封装在一个自定义组件中,从而作为一个页面被路由栈使用。当前支持的生命周期函数:aboutToAppear、onReady、onAppear、onShow、onHide、onDisappear、aboutToDisappear 、onWillAppear、onWillDisappear。

2024-09-25 14:17:28 870

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除