HarmonyOS NEXT应用开发—在Native侧实现进度通知功能

介绍

本示例通过模拟下载场景介绍如何将Native的进度信息实时同步到ArkTS侧。

效果图预览

img

使用说明

  1. 点击“Start Download“按钮后,Native侧启动子线程模拟下载任务
  2. Native侧启动子线程模拟下载,并通过Arkts的回调函数将进度信息实时传递到Arkts侧

实现思路

  1. 前端进度条使用Progress绘制
Progress({ value: this.progress, total: 100, type: ProgressType.Ring }).width($r("app.integer.progress_size")).height($r("app.integer.progress_size")).animation({ duration: NativeProgressNotifyConstants.PROGRESS_ANIMATION_DURATION, curve: Curve.Ease }).style({ strokeWidth: 15 })
  1. JS侧调用Native侧方法,并传入用于接收下载进度的回调函数,在该回调函数中更改状态变量
naitiveprogressnotify.startDownload((data: number) => {this.progress = data;console.log("[NativeProgressNotify]progress:" + this.progress);
})
  1. Naitive侧使用std::thread创建子线程执行模拟下载的任务
std::thread downloadThread(downloadTask, asyncContext);
downloadThread.detach();
  1. Native侧模拟下载的线程中,每100ms执行一次uv_queue_work;向eventloop事件堆栈push异步任务。
 while (context && context->progress < 100) {context->progress += 1;napi_acquire_threadsafe_function(tsfn);napi_call_threadsafe_function(tsfn, (void *)context, napi_tsfn_blocking);std::this_thread::sleep_for(std::chrono::milliseconds(100));}
  1. 在模拟下载任务的子线程中,调用napi_call_function来执行Arkts回调,向Arkts侧传递进度信息
 napi_create_int32(arg->env, arg->progress, &progress);napi_call_function(arg->env, nullptr, jsCb, 1, &progress, nullptr);

高性能知识点

本例中,在Native侧使用子线程执行下载任务,从而避免对主线程资源的占用,能有效提升性能

工程结构&模块类型

verifycode                                       // har类型
|---constants
|   |---NativeProgressNotifyContants.ets         // 常量
|---view
|   |---NativeProgressNotify.ets                 // 视图层

模块依赖

不涉及

参考资料

  1. Progress
  2. Napi
  3. libuv
    最后分享一份鸿蒙(HarmonyOS)开发学习指南需要的可以扫码免费领取!!!

《鸿蒙(HarmonyOS)开发学习指南》

第一章 快速入门

1、开发准备

2、构建第一个ArkTS应用(Stage模型)

3、构建第一个ArkTS应用(FA模型)

4、构建第一个JS应用(FA模型)

5、…

图片

第二章 开发基础知识

1、应用程序包基础知识

2、应用配置文件(Stage模型)

3、应用配置文件概述(FA模型)

4、…

图片

第三章 资源分类与访问

1、 资源分类与访问

2、 创建资源目录和资源文件

3、 资源访问

4、…

图片

第四章 学习ArkTs语言

1、初识ArkTS语言

2、基本语法

3、状态管理

4、其他状态管理

5、渲染控制

6、…

图片

第五章 UI开发

1.方舟开发框架(ArkUI)概述

2.基于ArkTS声明式开发范式

3.兼容JS的类Web开发范式

4…

图片

第六章 Web开发

1.Web组件概述

2.使用Web组件加载页面

3.设置基本属性和事件

4.在应用中使用前端页面JavaScript

5.ArkTS语言基础类库概述

6.并发

7…

图片

11.网络与连接

12.电话服务

13.数据管理

14.文件管理

15.后台任务管理

16.设备管理

17…

图片

第七章 应用模型

1.应用模型概述

2.Stage模型开发指导

3.FA模型开发指导

4…

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/611049.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Redis入门到通过之Redis安装

文章目录 Redis安装说明1.单机安装Redis1.1.安装Redis依赖1.2.上传安装包并解压1.3.启动1.3.1.默认启动1.3.2.指定配置启动1.3.3.开机自启 2.Redis客户端2.1.Redis命令行客户端2.2.图形化桌面客户端2.2.1.安装2.2.2.建立连接 Redis安装说明 大多数企业都是基于Linux服务器来部…

详解小度Wi-Fi内部芯片及电路原理图分析

小度随身WiFi是一款便携式USB路由器&#xff0c;它实现了用户跨终端联网&#xff0c;随身携带&#xff0c;可以在室内实现免费WiFi覆盖。外形美观&#xff0c;小巧便携。 这一款小度WiFi采用的主芯片是MT7601UN&#xff0c;一款高度集成的Wi-Fi单芯片&#xff0c;支持150 Mbp…

HarmonyOS实战开发-图片编辑、使用 TextArea 实现多文本输入

介绍 本示例使用 TextArea 实现多文本输入&#xff0c;使用 ohos.app.ability.common 依赖系统的图库引用&#xff0c;实现在相册中获取图片&#xff0c;使用 ohos.multimedia.image 生成pixelMap&#xff0c;使用pixelMap的scale()&#xff0c;crop()&#xff0c;rotate()接口…

计算两个时间段的差值

计算两个时间段的差值 运行效果&#xff1a; 代码实现&#xff1a; #include<stdio.h>typedef struct {int h; // 时int m; // 分int s; // 秒 }Time;void fun(Time T[2], Time& diff) {int sum_s[2] { 0 }; for (int i 0; i < 1; i) { // 统一为秒数sum_s[…

pandas(day10)

一. 各各品类产品交易指数对比 获取文件名 files glob.glob("./*.xlsx")# 读取数据&#xff0c;并改列名&#xff0c;增加一列 品牌 dfs [] for f in files:t f[2:4]df pd.read_excel(f)df["品牌"] tif t "拜耳":df.rename(columns{"…

在线课程平台LearnDash评测 – 最佳 WordPress LMS插件

在我的LearnDash评测中&#xff0c;我探索了流行的 WordPress LMS 插件&#xff0c;该插件以其用户友好的拖放课程构建器而闻名。我深入研究了各种功能&#xff0c;包括课程创建、测验、作业、滴灌内容、焦点模式、报告、分析和管理工具。 我的评测还讨论了套餐和定价选项&…

视频基础学习五——视频编码基础二(编码参数帧、GOP、码率等)

系列文章目录 视频基础学习一——色立体、三原色以及像素 视频基础学习二——图像深度与格式&#xff08;RGB与YUV&#xff09; 视频基础学习三——视频帧率、码率与分辨率 视频基础学习四——视频编码基础一&#xff08;冗余信息&#xff09; 视频基础学习五——视频编码基础…

基于Springboot的笔记记录分享网站(有报告)。Javaee项目,springboot项目。

演示视频&#xff1a; 基于Springboot的笔记记录分享网站&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构…

YOLOv8改进 | 检测头篇 | 自研超分辨率检测头HATHead助力超分辨率检测(混合注意力变换器检测头)

一、本文介绍 本文给大家带来的改进机制是由由我本人利用HAT注意力机制&#xff08;超分辨率注意力机制&#xff09;结合V8检测头去掉其中的部分内容形成一种全新的超分辨率检测头。混合注意力变换器&#xff08;HAT&#xff09;的设计理念是通过融合通道注意力和自注意力机制…

[AIGC] Spring中的SPI机制详解

文章目录 1. 什么是SPI2. Spring中的SPI机制3. Spring SPI的工作流程4. Spring SPI的应用 1. 什么是SPI SPI &#xff08;Service Provider Interface&#xff09;是Java中服务提供者接口的缩写&#xff0c;它是Java提供的一种用于被第三方实现或扩展的接口&#xff0c;SPI的作…

面试: 单例模式

目录 一、饿汉单例&#xff08;实现Serializable&#xff09; 1、破坏单例的三种情况 &#xff08;1&#xff09;反射破坏单例 &#xff08;2&#xff09;反序列化破坏单例 &#xff08;3&#xff09;Unsafe破坏单例 2、饿汉单例&#xff08;利用枚举实现&#xff09; 二…

通过调用Vcenter-Api获取Vcenter中服务器信息

通过调用Vcenter-Api获取Vcenter中服务器信息 文章目录 通过调用Vcenter-Api获取Vcenter中服务器信息1. 获取Vmware API帮助文档2. 获取访问凭证3. 获取服务器清单4. 获取服务器更多信息5. 获取虚机更多信息6. 获取磁盘信息7. 获取操作系统相关 1. 获取Vmware API帮助文档 htt…