[Cordova学习]5.Cordova(android)架构和实现

JS和Native的通信方式

从JS到Java通信方式有2种。

  • addJavascriptInterface方法JS_OBJECT(默认)

 →参数是直接从JS传到Java对象的。同步处理方式。
   

  • js的prompt方法

 →①Android2.3的虚拟机使用addJavascriptInterface的时候存在BUG,则可以使用prompt方法。
   ②addJavascriptInterface不支持的情况下(内存中不存在Cordova定义的JAVA对象_cordovaNative的时候)、自动转到prompt方法使用。
   有些机器(Galaxy2 Android4.1)的addJavascriptInterface的返回参数不支持,则自动转换为prompt方法。
    并且JS_OBJECT的返回值的参数不存在的情况下,自动再实行一遍Prompt方法。
通信模式是根据环境不同自动切换以外,还可以自己指定:在deviceReady事件执行后可以进行设置。


var exec = cordova.require('cordova/exec'); 
exec.setJsToNativeBridgeMode(exec.jsToNativeModes.JS_OBJECT);

var exec = cordova.require('cordova/exec'); 
exec.setJsToNativeBridgeMode(exec.jsToNativeModes.PROMPT);

从Java到JS通信有4种方式  ,经常使用的是Polling方法和ONLINE_EVENT 
・Polling方法 (异步方法)    
 →50msJSTimer进行轮询,判断JAVA侧有没有JS的回调方法

・LOAD_URL方法    
→webView.loadUrl("javascript:")的方法、 
为了修改一个[送信后软键盘消失]的BUG

・ONLINE_EVENT方法(默认方法)    
 →网络的在线离线事件监视。
  在事件回调中执行一次POLLING的方法。不使用JSTIMER轮询。
 
・PRIVATE_API方法    
 →Webviewの私有方法进行反射

这些通信模式需要指定的情况下在deviceReady事件之后执行

var exec = cordova.require('cordova/exec'); 
exec.setNativeToJsBridgeMode(exec.nativeToJsModes.LOAD_URL);

var exec = cordova.require('cordova/exec'); 
exec.setJsToNativeBridgeMode(exec.nativeToJsModes.jPRIVATE_API);




你可能感兴趣的:(java,Cordova,PhoneGap)