在Android上实现Java和Js交互

标签: android 上实 java | 发表时间:2013-07-05 18:34 | 作者:
出处:http://www.iteye.com
  其实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编辑发布,转载请注明出处,谢谢。



已有 0 人发表留言,猛击->> 这里<<-参与讨论


ITeye推荐



相关 [android 上实 java] 推荐:

在Android上实现Java和Js交互

- - ITeye博客
  其实webview加载资源的速度并不慢,但是如果资源多了,当然就很慢. 图片、 css 、 js 、 html 这些资源每个大概需要 10-200ms ,一般都是 30ms 就 ok 了. 不过webview是必须等到全部资源都完成加载,才会进行渲染的,所以加载的速度很重要. 从Google上我们了解到,webview 加载页面的顺序是:先加载 html ,然后从里面解析出 css 、 js 文件和页面上的图片资源进行加载.

Java/Android编码规范

- - CSDN博客推荐文章
1.        为什么需要编码规范?. 编码规范对于程序员而言尤为重要,有以下几个原因:. l        一个软件的生命周期中,80%的花费在于维护. l        几乎没有任何一个软件,在其整个生命周期中,均由最初的开发人员来维护. l        编码规范可以改善软件的可读性,可以让程序员尽快而彻底地理解新的代码.

Android中Java和JavaScript交互

- - 极客521 | 极客521
Android提供了一个很强大的WebView控件用来处理Web网页,而在网页中,JavaScript又是一个很举足轻重的脚本. 本文将介绍如何实现Java代码和Javascript代码的相互调用. 实现Java和js交互十分便捷. WebView开启JavaScript脚本执行. WebView设置供JavaScript调用的交互接口.

android 或者java SAX解析XML

- - ITeye博客
本实例解析xml使用的是继承DefaultHandler类,此类就是java中封装好的xml解析器类,下面看代码详细说明:. 第一步:首先说明下xml文件,Java Sax解析是按照xml文件的顺序一步一步的来解析,在解析xml文件之前,我们要先了解xml文件的节点的种类,一种是ElementNode,一种是TextNode.

Android Java层的anti-hooking技巧

- - WooYun知识库
原文: http://d3adend.org/blog/?p=589. 一个最近关于检测native hook框架的方法让我开始思考一个Android应用如何在Java层检测Cydia Substrate或者Xposed框架. 下文所有的anti-hooking技巧很容易就可以被有经验的逆向人员绕过,这里只是展示几个检测的方法.

Oracle和谷歌Java Android官司将推迟

- Dennis Lee - cnBeta.COM
Oracle和谷歌之间一场等待已久的官司可能会推迟至10月17日以后进行,这场官司的内容是Android操作系统所谓的Java专利权之争. 本案法官William Alsup称根据专利权专家Florian Mueller的预测,谷歌Oracle案很可能会被推迟.

欧朋浏览器6.2 For Android/Symbian/Java发布更新

- 洞箫 - cnBeta.COM
新一代浏览器界面,简约、精致、时尚,摆脱拥挤,复杂的手机浏览器界面,打造个性化的浏览器. 快速拨号“快速拨号”将喜欢的网站添加到首页,实现一键点击访问. 通过定制“快速拨号”,你可以打造一个个性化的浏览器首页. 体积小巧、功能强大,欧朋浏览器结合了强大的内核和领先的云端转码技术,可使手机访问网站速度提升5到10倍,使上网流量节省最高达90%.

基于 PhoneGap 与 Java 开发的 Android 应用的性能对比

- jinn - 搜索研发部官方博客
        此次的调研的重点是针对一个Android应用的基础需求,用phonegap与Java实现的应用在性能及开发成本等方面的对比.        开发一个应用的最基本需求应该是浏览性需求,而在Android开发中ListView比较常用的控件,广泛被用于数据列表的展现上,而且也比较灵活. 所以本次选择用phonegap和Java各自实现一个ListView的内容展现功能的应用;同时引入另外一个常用组件GridView来实现图片浏览的功能应用.

Oracle和Google拟就Android-Java一案的判决提起上诉

- - InfoQ cn
Google的移动操作系统Android以Java作为其基础,陪审团判决Google侵犯了Oracle的版权但并没有侵犯其专利. Oracle和Google都准备就判决结果提起上诉. 由于原案非常复杂,因此它被分为两部分审理——首先处理的是版权包含的内容,Java的API是否受版权法保护是颇有争议的;之后处理专利侵权问题.

RAP Mobile:用Java开发iOS和Android应用

- - ITeye资讯频道
自从Web技术如HTML5、JavaScript、CSS在移动编程上日益流行后,Java在编写跨平台移动应用上似乎不太流行了. 因此, EclipseSoure公司近日推出了 RAP Mobile,希望能够作为Java跨平台开发的一个替代方案. RAP Mobile提供了一个强大的Widget工具包,可用于渲染(render)原生的iOS和Android widget.