相关疑难解决方法(0)

Android使用V8而不使用WebView

我正在练习从Java执行javascript.Rhino在桌面上运行得非常好,但是必须回到Android上的(缓慢)解释模式(由于dalvik无法执行Rhino JIT编译的Java字节码).

Android有内置的V8 javascript引擎,通过JNI内部访问,应该提供比Rhino更好的性能; 但是,我能找到访问它的唯一方法是间接通过WebView.

不幸的是,WebView需要一个Context,并且与NPE一起使用空上下文崩溃,所以我甚至无法实例化一个虚拟WebView来执行代码并返回结果.我的练习的本质并不能让我为WebView提供一个Context,所以我希望也许有些东西我会忽略.

其中有几个V8Thread并行运行,所以我的布局中添加一个WebView并隐藏它并不是真的可行(据我所知),因为我不相信单个WebView可以在多个线程中执行函数.

private class V8Thread extends Thread
{
    private WebView webView;
    private String source;

    private double pi;
    private int i, j;

    public V8Thread(int i, int j)
    {
        pi = 0.0;
        this.i = i;
        this.j = j;

        source = "";

        try {
            InputStreamReader isReader = new InputStreamReader(assetManager.open("pi.js"));
            int blah = isReader.read();
            while (blah != -1)
            {
                source += (char)blah;
                blah = isReader.read();
            }

            webView = new WebView(null);
            webView.loadData(source, "text/html", "utf-8");
            webView.getSettings().setJavaScriptEnabled(true);
            webView.addJavascriptInterface(this, "V8Thread");
        } catch (IOException …
Run Code Online (Sandbox Code Playgroud)

javascript android v8

45
推荐指数
3
解决办法
2万
查看次数

使用V8 JavaScript引擎在没有Web视图的情况下执行JS lib

我正在开发一个JavaScript组件,负责向服务器发出请求并将结果分派给UI.通过在JavaScript中执行此操作,我可以在多种类型的UI中使用我的组件:Android应用程序,iOS应用程序,桌面应用程序(QT),Web应用程序......

所有这些UI都实例化了一个Web视图,因此当UI加载专用URL(webview.load("file://myfirstWebPage.html"))时,我的组件就会启动.

第一个网页加载所有JavaScript组件,一旦完成,UI就能够向JavaScript组件发出一些请求,这会向服务器发出请求,当它有响应时,它会将其发送回客户端( UI Android,UI iOS ...)

这个架构工作正常,但我想知道是否有另一种方法加载JavaScript组件而不使用每个客户端上的Web视图?

V8引擎可以帮助我吗?

javascript v8 webview

16
推荐指数
3
解决办法
2万
查看次数

标签 统计

javascript ×2

v8 ×2

android ×1

webview ×1