#鸿蒙通关秘籍#如何在HarmonyOS中实现Native侧进度通知?

HarmonyOS
6天前
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
Yvr第七章BPM

在HarmonyOS开发中,实现Native侧进度通知可以通过以下步骤进行:

  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 })
    
  2. 调用Native方法: 使用JS侧代码调用Native侧方法,并传入用于接收进度的回调函数,以便更新状态值。

    naitiveprogressnotify.startDownload((data: number) => {
        this.progress = data;
        console.info("[NativeProgressNotify]progress:" + this.progress);
    })
    
  3. 创建Native线程: Native侧使用std::thread创建线程来模拟下载任务,避免主线程资源占用。

    std::thread downloadThread(downloadTask, asyncContext);
    downloadThread.detach();
    
  4. 定时推送异步任务: 使用uv_queue_work每100ms在Native侧线程中推送异步任务,实现进度更新。

    while (context && context->progress < 100) {
         context->progress += 1;
         napi_acquire_threadsafe_function(context->tsfn);
         napi_call_threadsafe_function(context->tsfn, (void *)context, napi_tsfn_blocking);
         std::this_thread::sleep_for(std::chrono::milliseconds(100));
     }
    
  5. 执行Arkts回调: 使用napi_call_function调用回调函数,将进度信息传递给Arkts侧。

    napi_create_int32(arg->env, arg->progress, &progress);
    napi_call_function(arg->env, nullptr, jsCb, 1, &progress, nullptr);
    
分享
微博
QQ
微信
回复
6天前
相关问题
如何在Native释放ArkTS对象
2330浏览 • 1回复 待解决