在Android上怎样实现JAVA和JS交互

在Android上怎样实现JAVA和JS交互,第1张

  其实webview加载资源的速度并不慢,但是如果资源多了,当然就很慢。、css 、js 、html这些资源每个大概需要10-200ms ,一般都是30ms就ok了。不过webview是必须等到全部资源都完成加载,才会进行渲染的,所以加载的速度很重要!从Google上我们了解到,webview加载页面的顺序是:先加载html,然后从里面解析出css、js文件和页面上的资源进行加载。如果webkit的缓存里面有,就不加载。加载完这些资源之后,就进行css的渲染和js的执行。Css的渲染一般不需要很长时间,几十毫秒就ok。关键是js的执行,如果用了jQuery,则执行起来需要5-6秒。而在这段时间,如果不在webview里设置背景,网页部分是白色的,很难看。这是一个很糟糕的用户体验。所以#欧#柏泰#克建议如果用网页布局程序,最好别用那些庞大的js框架。最好使用原生的js写业务脚本,以提升加载速度,改善用户体验。

  在Android上怎样实现JAVA和JS交互呢?Android的webview是基于webkit内核的,webview中集成了js与java互调的接口函数,通过addJavas criptInterface方法,可以将Java的类注册进webkit,给网页上的js进行调用,而且还可以通过loadUrl方法是给webkit传递一个URL,供浏览器来进行解析,实现Java和js交互。

 

  Java和js交互有以下一些特点:

  1Java 调用 js 里面的函数,速度并不令人满意,大概一次一两百毫秒吧,如果要做交互性很强的事情,这种速度会让人疯掉的。而反过来就不一样了, js 去调 java 的方法,速度很快,基本上 40-50 毫秒一次。所以尽量用 js 调用 java 方法,而不是 java 去调用 js 函数。

  2Java 调用 js 的函数,没有返回值,而 Js 调用 java 方法,可以有返回值。返回值可以是基本类型、字符串,也可以是对象。如果是字符串,有个很讨厌的问题,第 3 点我会讲的。如果是对象,这个对象会被转换为 js 的对象,直接可以访问里面的方法。但是我不推荐 java 返回给 js 的是对象,除非是必须。因为 js 收到 java 返回的对象,会产生一些交换对象,而如果这些对象的数量增加到了 500 或 600 以上,程序就会出问题。所以尽量返回基本数据类型或者字符串。

  3Js 调用 Java 的方法,返回值如果是字符串,你会发现这个字符串是 native 的,不能对它进行一些修改 *** 作,比如想对它 substr ,取不到。怎么解决呢转成 locale 的。使用 toLocaleString() 函数就可以了。不过这个函数的速度并不快,转化的字符串如果很多,将会很耗费时间。

            <body>   

                <!-- Calls into the javascript interface for the activity -->  

                <!-- 从HTML文件中调用activity中的函数 -->  

                <!-- 也就是从HTML到android程序 留意windowdemoclickOnAndroid()这句话 -->  

                <a onClick="windowdemoclickOnAndroid()">Click</a>   

            </body>  

  

mWebViewaddJavascriptInterface(new DemoJavaScriptInterface(), "demo");

final class DemoJavaScriptInterface {  

        DemoJavaScriptInterface() {  

        }  

  

        / 

          This is not called on the UI thread Post a runnable to invoke 

          

          loadUrl on the UI thread 

          

         /  

        public void clickOnAndroid() {        // 注意这里的名称。它为clickOnAndroid(),注意,注意,严重注意  

            mHandlerpost(new Runnable() {  

                public void run() {  

                      

                    ToastmakeText  

                }  

            });  

        }  

    }

private void testEvaluateJavascript(WebView webView) {

webViewevaluateJavascript("getGreetings()", new ValueCallback<String>() {

@Override

public void onReceiveValue(String value) {

Logi(LOGTAG, "onReceiveValue value=" + value);

}});

}

具体原因是这样的:

1、Java调用js里面的函数、效率并不是很高、估计要200ms左右吧、做交互性很强的事情、这种速度很难让人接受、而js去调Java的方法、速度很快、50ms左右、所以尽量用js调用Java方法。

2、Java调用js的函数、没有返回值、调用了就控制不到了。

3、Js调用Java的方法、返回值如果是字符串、你会发现这个字符串是native的、转成locale的才能正常使用、使用toLocaleString()函数就可以了、不过这个函数的速度并不快、转化的字符串如果很多、将会很耗费时间。

4、网页中尽量不要使用jQuery、执行起来需要5-6秒、最好使用原生的js写业务脚本、以提升加载速度、改善用户体验。

java调用js?java在服务器JVM运行,怎么可以 *** 作客户端的浏览器中的js内容呢? 应该是用java输出一个js函数,并在js函数中调用另一个解码函数对某个内容解码。 对于java来说,js内容就是一个文本串,java只负责输出网页到客户端。由js动态 *** 作网

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/12461028.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-23
下一篇2023-05-23

发表评论

登录后才能评论

评论列表(0条)

    保存