繁体   English   中英

How to call a function in WebView Javascript from Android Java without delay?

[英]How to call a function in WebView Javascript from Android Java without delay?

使用此方法调用 javascript 函数时,回调中有几毫秒的延迟(10ms - 50ms)

 webView.evaluateJavascript("javascript: updateARObject()", callback);

如何在 javascript 中即时调用 function,所有文件都在 Android 的资产文件夹中。

像 Xwalkview 这样的自定义 WebView 是否有可能? 还是两者之间的套接字连接? ARCore 正在与 Three.js 实时通信,如何实现?

存在回调的原因是因为它不能从 android 应用程序立即完成。

主要原因是Android使用WebView运行javascript。 现代 Android WebView只是包装在 android 视图中的 Google Chrome 的一个实例。 如您所知,此实例需要像它一样在单独的进程上运行。 如果选择深入挖掘,他会发现 android app 和WebView之间的通信是通过 AIDL 服务完成的,因为所有进程间通信都应该在 android 中完成。

考虑到将 AIDL 调用写入堆栈所需的时间,分配 memory 并形成消息(主要的 AIDL 通信方法),发送它,在 Chrome 中解包,解析,执行 javascript 并再执行所有这些操作以回答 - 10ms - 50ms 是非常低的延迟。

也许 ArCore 有自己的 js 处理器来快速处理 js 文件。 或者 Google Chrome 有自己的方法来与 ArCore(或内部实例)通信。 我不知道——但这是谷歌开发的产品——我认为他们知道自己的捷径。

自定义WebView可能会起作用 - 唯一的事情是,基本上它将是一个新版本的浏览器,由于一大堆可能的原因,您需要独立于所有其他浏览器支持您的 js。

希望它能以某种方式帮助你。

从 kitkat 开始,使用 evaluateJavascript 方法而不是 loadUrl 来调用 javascript 函数,如下所示:

 if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT) {
    webView.evaluateJavascript("enable();", null);
} else {
    webView.loadUrl("javascript:enable();");
}

您可以通过设置使用 function 呼叫延迟:

window.setTimeout(function () { ... })

但是,它不一定会立即运行,也不会明确设置延迟。 如果您将使用 setTimeout,它会从执行队列中删除 function,并且只会在 JavaScript 完成当前执行队列后调用。

console.log(1);
setTimeout(function() {console.log(2)});
console.log(3);
console.log(4);
console.log(5);
//console logs 1,3,4,5,2

有关详细信息,请参阅http://javascriptweblog.wordpress.com/2010/06/28/understanding-javascript-timers/

希望,你会找到你的答案。 干杯!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM