HarmonyOS C++ 调用 ets 层函数报错闪退?

这是 C++ 代码:

PTR(LoadResult) CommonSchemeOutJumpProxy::HandByOutLaunch(PTR(Scene) page, std::string url, std::string scheme) {
  auto js_func = aki::JSBind::GetJSFunction("predictOutDomainLaunch");
  //    auto target = std::static_pointer_cast<CRVOhos::CRVPageMirror>(page)->GetTsMirrorRef();
  if (js_func != nullptr) {
    XLOG(INFO) << TAG << "HandByOutLaunch: " << url;
    // promise;;
    std::promise<PTR(LoadResult)> outlaunch_promise;

    // 启动线程触发 rpc;
    aki::TaskRunner::PostTask("main", [&]() {
      // callback
      std::function<void(int, std::string)> callback = [&](int type, std::string url) {
        XLOG(INFO) << TAG << "HandByOutLaunch: child thread notify";
        auto loadResultPtr = std::make_shared<LoadResult>();
        loadResultPtr->type = LoadResult::NumberToLoadResultType(type);
        loadResultPtr->redirect_url = url;
        outlaunch_promise.set_value(loadResultPtr);
      };
      XLOG(INFO) << TAG << "HandByOutLaunch: start predictOutDomainLaunch in child thread";
      // predictOutDomainLaunch
      js_func->Invoke<void>(url, callback);
    });
    // wait for
    auto loadResultPtr = outlaunch_promise.get_future().get();
    XLOG(INFO) << TAG << "HandByOutLaunch: get the loadResult: " << loadResultPtr->type << ", redirect_url: " << loadResultPtr->redirect_url;
    return loadResultPtr;
  } else {
    return nullptr;
  }

这是 JS 层代码:

// 注册外跳 OutDomain 接口;;
aki.JSBind.bindFunction('predictOutDomainLaunch', (url: string, OutDomainLaunchListener: (type: number, url: string) => void): void => {
    hilog.info(0x0000, 'OutLaunch-predictOutDomainLaunch', 'start out launch: %{public}s', JSON.stringify(url));
    setTimeout(() => {
        OutDomainLaunchListener(2, "") // redirect;
    }, 5 * 1000);
});

然后启动后会闪退!

阅读 627
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进