Jetpack JavaScriptSandbox 永远阻塞

问题描述 投票:0回答:1

我正在尝试使用 Jetpack JavaScriptSandbox 库异步运行 js 代码,并且它的文档说要运行

JavaScriptSandbox.createConnectedInstanceAsync(context).get()
。 第一部分返回一个
ListenableFuture<JavaScriptSandbox>
,通过
.get()
部分您可以获得实际的 JavaScriptSandbox 连接。现在,由于某种原因,
.get()
部分在我的设备上永远被阻止。

我还需要寻找什么额外的东西吗?

提前致谢!

android kotlin android-jetpack
1个回答
0
投票

get()
使 UI 线程等待 Future 得到解析,而解析应该在 UI 线程上进行。

您可以尝试在后台线程上调用 get() 或使用 Future 类提供的异步 API。

https://issuetracker.google.com/issues/290254837#comment4

可以暂时使用回调。

ListenableFuture<JavaScriptSandbox> jsSandboxFuture =
        JavaScriptSandbox.createConnectedInstanceAsync(context);

Futures.addCallback(jsSandboxFuture, new FutureCallback<>() {
    @Override
    public void onSuccess(@Nullable JavaScriptSandbox jsSandbox) {
        sandbox = new WeakReference<>(jsSandbox);
    }

    @Override
    public void onFailure(@NonNull Throwable throwable) {
        // ...
    }
}, MoreExecutors.directExecutor());

在 init 方法中使用它。并在其他部分使用

realSandBox.createIsolate();

© www.soinside.com 2019 - 2024. All rights reserved.