phonegap使用的java与js互相调用的原理

标签: phonegap java js | 发表时间:2014-06-09 19:40 | 作者:chriszeng87
出处:http://www.iteye.com

phonegap使用的java与js互相调用的原理。phonegap实现的模型刚也说了,有同步和异步两种。js实现的api,所以是js先会调用java代码,然后再返回给js。对于同步的而言,就是js调用java,然后java返回一个结果作为返回值。对于异步的而言,可能js掉了很多java代码,但是立即返回,然后java代码执行结束后再回调js代码,这里就涉及到js调java,然后java再调用js。

对于js调用java:

js调用java的入口是通过在js中调用prompt方法,这很奇怪吧,这个方法本来是让浏览器弹出个输入框的。我当初找了好久也没发现phonegap到底怎么搞得的让js调用java的代码,后来看到一会觉得该是这个方法,但是这是一个浏览器的客户端自己的东西,而且怪异的是浏览器并没有弹出输入框,后来终于发现。

在DroidGap.java中有个hack,重载了WebviewClient的onJsPrompt方法,然后执行了自己的逻辑。 也就是js调用prompt的时候,java端浏览器代码接受到这个,然后在响应的处理函数中根据传过来的参数,实现了一些特别的逻辑。可以从这个方法的注释上看出一二。

private LinkedList javascript;

服务器保存要回调的js的代码,供js客户端取回,这里java端是服务器端,js端是客户端,服务器端不可能请求客户端做啥,是b/s模型,所以phonegap实现了两种服务模型,一种是轮询,一种是XHR异步回调,也就是Ajax的模型。src/com/phonegap/CallbackServer.java是回调服务器的代码所在处。从类的注释中可以看到。

This class provides a way for Java to run JavaScript in the web page that has loaded PhoneGap. The CallbackServer class implements an XHR server and a polling server with a list of JavaScript statements that are to be executed on the web page.

CallbackServer提供的这两种模型,一种是XHR,一种是轮询,轮询很简单了,callbackserver服务器端,有一个保存回调js的列表,前面所说,然后每隔一段时间客户端的js会询问一次服务器,是否有需要回调的js,如果有则调用,然后每隔一段时再查询一次服务器。而基于XHR的,其实这个就是ajax用的机制了,js发起一个异步请求,然后服务器会在返回数据之前保持住这个连接,当返回数据就位后,服务器给请求客户端返回数据,然后关闭连接。然后客户端接受并且处理。

刚说了服务器端的代码实现,现在来看一下客户端js的相关代码。

PhoneGap.JSCallback = function() { ... xmlhttp.open("GET", "http://127.0.0.1:"+PhoneGap.JSCallbackPort+"/"+PhoneGap.JSCallbackToken , true); xmlhttp.send(); }

这个是XHR模型的代码,客户端js使用xhr请求服务器来获取js代码,进行回调。

PhoneGap.JSCallbackPolling = function() { ... var msg = prompt("", "gap_poll:"); if (msg) { setTimeout(function() { try { var t = eval_r(""+msg); } catch (e) { console.log("JSCallbackPolling: Message from Server: " + msg); console.log("JSCallbackPolling Error: "+e); } }, 1); setTimeout(PhoneGap.JSCallbackPolling, 1); } else { setTimeout(PhoneGap.JSCallbackPolling, PhoneGap.JSCallbackPollingPeriod); } }

这个是轮询方式的,可以看到客户端每隔PhoneGap.JSCallbackPollingPeriod段时间,就请求一次服务器(通过prompt("", "gap_poll:");)。

 

转自: http://blog.sina.com.cn/s/blog_6e4d9a9b0101ny26.html



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


ITeye推荐



相关 [phonegap java js] 推荐:

phonegap使用的java与js互相调用的原理

- - 移动开发 - ITeye博客
phonegap使用的java与js互相调用的原理. phonegap实现的模型刚也说了,有同步和异步两种. js实现的api,所以是js先会调用java代码,然后再返回给js. 对于同步的而言,就是js调用java,然后java返回一个结果作为返回值. 对于异步的而言,可能js掉了很多java代码,但是立即返回,然后java代码执行结束后再回调js代码,这里就涉及到js调java,然后java再调用js.

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

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

在Android上实现Java和Js交互

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

初识PhoneGap

- - IT技术博客大学习
标签:   PhoneGap.      一、PhoneGap是什么.     PhoneGap是一个标准的开源框架,用PhoneGap开发移动应用是免费的,无论是商业或是开源;一个用基于HTML,CSS和JavaScript的,创建跨平台移动应用的 快速开发平台. 它使开发者能够利用iPhone、Android、Palm、Symbian、WP7、Bada和Blackberry智能手机的核心功能——包括地理定位,加速器,联系人,声音和振动等,此外PhoneGap拥有丰富的插件,可以以此扩展无限的功能.

Phonegap踩过的坑

- - snoopyxdy的博客
最近2个月一直在做一个Phonegap(现改名为cordova,其实我用的cordova来做的,但是叫惯了phonegap)的手机app项目,目前已经debug完毕,准备发布上线了,发现真印证了网上流传的一句话:. 如果你恨一个人,让他去开发PhoneGap应用;如果你爱一个人,让他去开发PhoneGap应用.

Android + Eclipse + PhoneGap 环境配置

- - CSDN博客推荐文章
用了3天的时间,终于把环境搭建完毕,郁闷了N天,终于完成了. 这里我只是讲述我安装的过程,仅供大家参考. 环境搭建首先要去下载一些安装包:. (下载前注意一下,电脑是32位还是64位的请注意选择安装包). java环境的JDK:http://www.oracle.com/technetwork/java/javase/downloads/index.html.

phonegap 框架详解 - Blue Sky ......

- - 博客园_首页
首先, 来看一下phonegap 初始化流程以及Native 与 JS 交互流程图. 说明:socket server模式下, phonegap.js 源码实现的采用1 毫秒执行一次XHR请求,  当Native  JS 队列里面有JS语句数据时,才是真正的1毫秒调用一下;  当没有数据, scoket server 会阻塞10毫秒, 也就是XHR 要等10秒钟才能收到结果,并进行下一次的轮询.

Hybrid(混合式) Appz之WebView中如何让JS与Java安全地互相调用

- - CSDN博客推荐文章
在现在安卓应用原生开发中,为了追求开发的效率以及移植的便利性,使用WebView作为业务内容展示与交互的主要载体是个不错的折中方案. 那么在这种Hybrid(混合式) App中,难免就会遇到页面JS需要与Java相互调用,调用Java方法去做那部分网页JS不能完成的功能. 网上的方法可以告诉我们这个时候我们可以使用addjavascriptInterface来注入原生接口到JS中,但是在安卓4.2以下的系统中,这种方案却我们的应用带来了很大的安全风险.

WebView JS 交互

- - ITeye博客
WebView加jquery做页面会怎么样呢. // 创建WebView对象. // 把programList添加到js的全局对象window中,. // 这样就可以使用window.programList来获取数据. * 定义js回调java函数. // 绑定键盘的向上,向下按钮事件触发相应的js事件.

PhoneGap现已完全支持WP7

- - HTML5研究小组
PhoneGap现已完全支持Windows Phone 7所有的原生功能,其支持力度达到了iOS与Android的水平. 微软在去年7月帮助Nitobi将PhoneGap移植到了Windows Phone Mango上,并在9月 发布了 该框架的一个可用版本. 很多原生特性都得到了支持,包括Accelerometer、Camera、Contacts、Geolocation、 Notification与MediaCapture,但团队希望能找到一些Bug.