`
chriszeng87
  • 浏览: 741188 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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

阅读更多

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

分享到:
评论

相关推荐

    phoneGap与android的activity交互例子,互相调用函数,js,java的交互

    一个Android原生activity与phonegap交互的例子, java调用js,js调用java 工程中是一个嵌套了phonegap的activity ,外层是android的activity,内层framelayout中是phonegap,完成了交互的简单例子

    phonegap js调用本地java

    总结来说,PhoneGap的JavaScript调用本地Java功能依赖于Cordova的插件系统,通过创建自定义插件,可以方便地实现JavaScript与Android平台之间的交互。在实际开发中,这种机制使得开发者可以利用JavaScript的便利性来...

    phonegap开发中JS与Android之间的交互

    在"PhoneGap开发中JS与Android之间的交互"这一主题中,我们将深入探讨如何通过JavaScript调用Android的API,以及如何处理Android与JavaScript的通信。 1. **PhoneGap架构** PhoneGap基于Cordova,它的架构分为三个...

    phoneGap与android的activity交互例子,互相调用函数,js,java的交互.zip

    综上所述,PhoneGap与Android的Activity交互是一个涉及多层面的技术课题,包括WebView的使用、JavaScript与Java的通信、Android的生命周期管理以及自定义功能的扩展等。理解和掌握这些知识点对于开发出高效、稳定的...

    PhoneGap js调用 android demo

    这个“PhoneGap js调用 android demo”是PhoneGap技术的一个实例,展示了如何通过JavaScript来调用Android平台的原生功能。 首先,我们需要理解PhoneGap的核心原理。PhoneGap提供了一个桥接机制,通过JavaScript...

    自定义plugin插件实现phonegap与Android交互

    然而,虽然JavaScript可以处理大部分的前端逻辑,但当涉及到与设备硬件或操作系统更深度的交互时,例如访问摄像头、GPS或调用系统API,就需要借助PhoneGap的Plugin机制。 在"自定义plugin插件实现phonegap与Android...

    PhoneGap Camera插件调用 Demo下载

    3. **JavaScript调用**:在你的JavaScript代码中,可以使用`cordova.plugins.camera`对象提供的方法来调用相机。例如,使用`getPicture`方法来拍照或选择图片: ```javascript var options = { quality: 75, ...

    Js调用Java方法并互相传参的简单实例

    标题和描述提及的知识点为:Js(JavaScript)与Java方法之间的调用以及参数传递的具体实现实例。在PhoneGap环境下,通过编写Java代码和JavaScript代码来实现跨平台的互调。接下来,我们将详细介绍相关的知识点。 **...

    PhoneGap实例

    2. 调用插件:在JavaScript代码中,你可以像调用普通函数一样调用插件的方法,PhoneGap会自动处理与原生代码的通信。 3. 错误处理:使用回调函数处理可能出现的错误,确保应用的健壮性。 六、PhoneGap项目实战 这个...

    phonegap调用android插件实现GPS定位

    对于Android平台,这些插件通常由Java编写,然后通过PhoneGap的桥接机制与JavaScript交互。在Android中,GPS定位涉及到Android的Location API,因此我们需要创建一个自定义的PhoneGap插件来调用这些API。 二、...

    【免费】phonegap调用安卓插件实现GPS定位

    Java部分用于处理与Android系统的交互,JavaScript部分则提供给Web端调用。 - Java代码中,你需要继承`CordovaPlugin`类,并重写`execute`方法,该方法接收来自JavaScript的请求,调用Android的Location Services ...

    phonegap2.5

    通过这个库,开发者可以用JavaScript调用各种设备API,如存储、网络、传感器等,使得Web应用能够充分利用设备的功能。 在实际开发过程中,开发者首先会创建一个HTML/JavaScript/CSS的Web项目,然后通过PhoneGap CLI...

    phonegap完整例子!

    PhoneGap是一个开源框架..."所涵盖的知识点的详细解析,包括PhoneGap的基本原理、与Android的集成、pad设备的适配、自定义插件的开发以及可能的数据处理策略。这些内容为深入学习和实践PhoneGap开发提供了全面的指导。

    phonegap源码

    在2.7.0版本中,开发者可以利用PhoneGap提供的API接口,通过JavaScript调用这些功能,而无需了解各个移动平台的原生代码。 源码包含的"jar包"是Java档案文件,它们通常包含了PhoneGap的库和依赖,使得开发者可以在...

    PhoneGap demo

    3. **JavaScript**:PhoneGap应用的主要编程语言,通过它调用PhoneGap API与设备硬件进行交互。开发者可以使用jQuery、AngularJS、React等JavaScript库和框架来提高开发效率。 4. **PhoneGap插件**:为了访问...

    Android PhoneGap简析

    实现层则是PhoneGap库,它包含了与设备API交互的Java代码,这些代码允许JavaScript调用原生功能。 PhoneGap的实现核心是WebView与JavaScript的交互机制,通常通过`addJavascriptInterface`方法暴露Java对象到...

    android之PhoneGap入门实例

    这需要在JavaScript代码中调用PhoneGap的device或geolocation API。 此外,为了在Android设备上运行和测试应用,我们需要在Android模拟器或实际设备上部署和调试。使用Android SDK Manager安装所需版本的SDK平台和...

    phonegap demo

    通过这个"phonegap demo",你可以学习到如何搭建PhoneGap环境,创建一个新的项目,理解PhoneGap的目录结构,以及如何编写与设备交互的JavaScript代码。此外,这个示例还可能会演示如何使用PhoneGap CLI来构建和部署...

    phonegap开发示例服务器端开发

    其核心在于使用WebView(移动设备内置的浏览器组件)作为应用程序的基础,同时提供JavaScript接口,让开发者能够调用设备的原生功能,如地理位置、加速度计、联系人列表、音频、振动等。 PhoneGap 的工作原理依赖于...

    PhoneGap开发的android应用实例

    PhoneGap将移动设备本身提供的复杂的API进行了抽象和简化,提供了一系列丰富的API供开发者调用,只要你会HTML和Javascript或者Java语言,就可以利用PhoneGap提供的API去调用各种功能,PhoneGap就能让你可以制作出在...

Global site tag (gtag.js) - Google Analytics