其实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代码与...通过分析这个项目,你应该能更好地理解在Android中实现Java和JavaScript交互的具体步骤和注意事项。记住,安全性和性能优化始终是开发过程中不可忽视的重要方面。
总结,Android开发中的Java与JavaScript交互是通过WebView组件、JavaScriptInterface、loadUrl和evaluateJavascript等方法实现的。合理地运用这些技术,可以打造功能丰富的混合式应用程序,充分利用两种语言的优点。...
android对交互进行了很好的封装,在开发中我们可以很简单的用java代码调用webview中的js,也可以用webview中的js来调用本地的java代码,这样我们可以实现很多原来做不了的功能,比如点击网页上的电话号码后,手机...
这个"Android js与java交互改进最终版"项目提供了兼容不同Android版本的JS与Java交互解决方案,确保在4.2以下和4.2以上版本都能正常工作。开发者可以通过学习这个DemoWebViewJS项目,了解如何安全、有效地实现...
6. **性能优化**: 频繁的Java和JavaScript交互可能影响性能。尽量减少不必要的通信,或者使用批量处理策略,以降低对用户体验的影响。 总之,Android实现Java和JavaScript通信的关键在于选择合适的接口,并确保安全...
在Android开发中,Java和JavaScript的交互是移动...此外,Android 4.2及以上版本对`addJavascriptInterface()`的使用进行了安全限制,因此在Android应用中进行Java-JavaScript交互时,必须考虑到兼容性和安全性的问题。
总结一下,Android中的WebView提供了Java与JavaScript交互的能力,主要通过以下步骤实现: 1. 初始化WebView,设置JavaScript支持。 2. 使用`addJavascriptInterface`暴露Java对象给JavaScript。 3. 在Java端监听...
以下将详细介绍Java和JavaScript如何在Android环境下进行互调。 ### 1. Android中的WebView组件 在Android中,我们通常使用`WebView`组件来加载和显示HTML内容。`WebView`不仅能够渲染网页,还提供了与JavaScript...
**三、Android与JavaScript交互** 1. **注入JavaScript接口** Android可以向JavaScript注入对象,使得JavaScript能调用Android的方法。首先定义一个JavaScriptInterface类: ```java @JavascriptInterface ...
同时,WebView还提供了Java代码与JavaScript交互的能力,使得我们可以利用JavaScript的灵活性和Android原生功能的强大结合,创建出丰富的混合应用。本文将详细介绍如何在Android中使用WebView实现Java程序与JS脚本的...
为了实现更丰富的功能,我们常常需要在Java代码和JavaScript之间进行交互。Android提供了两种主要的交互方式: 1. **`addJavascriptInterface()`方法** 创建一个Java对象,并通过`addJavascriptInterface()`方法将...
在Android应用开发中,Web视图(WebView)是一种强大的组件,它允许开发者在原生应用中展示网页内容,甚至实现JavaScript与Java代码的交互。这个"Android-Android和Js交互Demo"是关于如何利用WebView来实现这种交互...
本文将详细介绍如何实现Android与JavaScript之间的交互,包括Android调用JS的方法(有参和无参)以及JS调用Android的方法。 一、Android调用JS的方法 1. WebChromeClient与WebViewClient Android中的`WebView`...
本"android和js交互demo"提供了一个可以直接运行的实例,帮助开发者理解如何在Android中实现与JavaScript的有效通信。下面我们将深入探讨这个主题。 首先,Android中的JavaScript交互主要依赖于WebView组件,它允许...
本资料“Android应用源码之与js交互.zip”提供了一个示例项目“AndroidJsTest”,它将帮助我们深入理解如何在Android中实现Java与JavaScript之间的通信。 首先,Android中的JavaScript交互主要依赖于`WebView`组件...
在Android开发中,JavaScript(JS)与Java的交互是一个常见的需求,特别是在构建混合式移动应用时。本主题将深入探讨如何实现Java与JS之间的通信,包括互相调用函数以及传递参数。以下是一份详细的指南: 1. **...
这个Demo将帮助开发者理解如何在Android应用中实现在JS和Java之间进行有效的代码调用,为混合式应用开发提供了基础。通过深入学习和实践,开发者可以构建更加复杂的功能,提高应用的交互性和性能。
不使用Webview与JavaScript交互时,我们需要权衡性能、复杂性和功能需求。在选择方案时,应根据实际项目的需求,如执行效率、数据安全性、网络依赖等因素进行评估。对于某些简单场景,如计算或轻量级的数据转换,...
本教程将详细讲解如何在Android应用中使用WebView组件实现Android和JavaScript的交互。 首先,我们要了解`WebView`是Android提供的一种用于加载和显示网页的控件。它不仅能够展示静态HTML内容,还支持执行...
通过以上介绍,我们可以看出Android中的WebView组件是实现Java与JavaScript交互的重要工具。合理利用这一特性,开发者可以构建出既有丰富Web体验又具备原生性能的应用。但同时,也要注意安全问题,确保暴露给...