其实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 的 webview 是基于 webkit 内核的,webview 中集成了js与java互调的接口函数,通过addJavascriptInterface方法,可以将Java的类注册进webkit,给网页上的js进行调用,而且还可以通过loadUrl方法是给webkit传递一个uri,供浏览器来进行解析,实现Java和js交互。
要想运行网页上的js脚本,webview必须设置支持Javascript
mWebview.getSettings().setJavaScriptEnabled(true);
然后是设置webview要加载的网页:
web的网页:webView.loadUrl("http://www.google.com");
本地的网页:webView.loadUrl("file:///android_asset/XX.html"); //本地的存放在:assets文件夹中
webview做完基本的初始化后我们还要要给它,加进一个回调的代理类JavaScriptInterface,并给它一个调用的名称:ncp
mWebView.addJavascriptInterface(new JavaScriptInterface(), "ncp");
JavaScriptInterface可以是一个普通的Java类,类实现的方法,均可被js回调:
final class JavaScriptInterface { public int callOnJs() { return 1000; } public void callOnJs2(String mode) { //TODO } }
Java要调用js的方法,只需知道js的方法名称即可:
mWebView.loadUrl("javascript:onSaveCallback()");
js 这边就更简单:
<script type="text/javascript"> window.onload = function(){ document.getElementById('btn_1').addEventListener('click', onBtnClick, false); var _int_value = window.ncp.callOnJs(); alert("get int from java:" + _int_value ); } function onBtnClick() { window.ncp.callOnJs2("click"); } </script>
Java和js交互有以下一些特点:
1.Java 调用 js 里面的函数,速度并不令人满意,大概一次一两百毫秒吧,如果要做交互性很强的事情,这种速度会让人疯掉的。而反过来就不一样了, js 去调 java 的方法,速度很快,基本上 40-50 毫秒一次。所以尽量用 js 调用 java 方法,而不是 java 去调用 js 函数。
2.Java 调用 js 的函数,没有返回值,而 Js 调用 java 方法,可以有返回值。返回值可以是基本类型、字符串,也可以是对象。如果是字符串,有个很讨厌的问题,第 3 点我会讲的。如果是对象,这个对象会被转换为 js 的对象,直接可以访问里面的方法。但是我不推荐 java 返回给 js 的是对象,除非是必须。因为 js 收到 java 返回的对象,会产生一些交换对象,而如果这些对象的数量增加到了 500 或 600 以上,程序就会出问题。所以尽量返回基本数据类型或者字符串。
3.Js 调用 Java 的方法,返回值如果是字符串,你会发现这个字符串是 native 的,不能对它进行一些修改操作,比如想对它 substr ,取不到。怎么解决呢?转成 locale 的。使用 toLocaleString() 函数就可以了。不过这个函数的速度并不快,转化的字符串如果很多,将会很耗费时间。
本文由zhiweiofli编辑发布,转载请注明出处,谢谢。
相关推荐
Android开发java和js交互,在java中调用js的代码,通过js函数为java变量赋值
android对交互进行了很好的封装,在开发中我们可以很简单的用java代码调用webview中的js,也可以用webview中的js来调用本地的java代码,这样我们可以实现很多原来做不了的功能,比如点击网页上的电话号码后,手机...
最近项目开发,遇到了一个问题,就是要实现js和Android交互的问题,我以前以为这个事情实现不了,最后发现Android中已经有很好的封装了所以写了一个例子上传到这里和大家交流学习
Android js与java交互改进最终版,支持android4.2以下,和android4.2以上版本
WebView使用及在WebView中Java和JS交互
实现android中的webview,java与js的交互。代码条理清晰,注释详细,运行流畅。
Android 客户端实现 Java与js 进行交互,互相调用传参等等!
java 和 javascript的交互方式 1.java有参数调用 2.java无参数调用 3.javascript无参调用 4.javascript有参调用
做过 Android 混合开发的,应该都知道 Android 中 Java 代码和 Javascript 代码之间的交互怎么做。 首先回顾一下 Java 和 Javascript 之间的交互。 JavaScript 调用 Java Android 中 WebView 添加供 Html 页面调用的...
java和js互调
最近工作中为了赶进度,在项目中使用了WebView组件,用到了html与java的数据交互,也就是javascript与java的数据交互,本文即介绍了在应用中添加WebView,以及js如何与java进行数据的交互。
用Java代码调用WebView中的js函数、也可以用WebView中的js来调用Android应用中的Java代码,有无参数,有无返回值,包含多种实现方式。
资源文章地址 http://blog.csdn.net/wangtingshuai/article/details/8631835
Android 的 webview 是基于 webkit 内核的,webview 中集成了js与java互调的接口函数,通过addJavascriptInterface方法
android webView js方法和java交互例子源码和总结,自己亲自实践的小例子,分享给大家
主要介绍了Android中Java和JavaScript交互实例,本文给出了实现方法、实现代码、js调用Java、java调用js等内容,需要的朋友可以参考下
Android中webview使用js与java交互
webview中java与js安全交互 webview中java与js安全交互 webview中java与js安全交互 webview中java与js安全交互
主要介绍了Android WebView上实现JavaScript与Java交互 的相关资料,需要的朋友可以参考下
android + h5 混合开发 webview 版 小实例 + 数据交互 + 界面交互+ js调用java +java 调用js