菜鸟成长记

慢慢成为你想要的

PhoneGap插件调用Java流程源码分析(四)

                                           JS调用Java端 分析

想了解phonegap 开发大概流程,应该知道如下几点。

   1.js 通过html prompt弹窗接口往anroid native 发送消息。

   2.android java本地利用WebChromeClient 对象的 onJsPrompt函数截获html 弹窗的消息(cordova继承webChormeClient并且重写onJsPrompt)。

   3.android java本地截获到消息以后,通过PluginManager 把消息分发到具体插件,同时通过jsMessageQueue收集需要返回给js的数据。(异步处理)

   4.如何实现把jsMessageQueue的数据返回到js

   5.pluginmanager负责加载和管理所有plugin.


Js通过prompt函数 调用native代码
module.exports = {
    exec: function(bridgeSecret, service, action, callbackId, argsJson) {
        return prompt(argsJson, 'gap:'+JSON.stringify([bridgeSecret, service, action, callbackId]));
    },
    setNativeToJsBridgeMode: function(bridgeSecret, value) {
        prompt(value, 'gap_bridge_mode:' + bridgeSecret);
    },
    retrieveJsMessages: function(bridgeSecret, fromOnlineEvent) {
        return prompt(+fromOnlineEvent, 'gap_poll:' + bridgeSecret);
    }
};
在这里就会调用到本地webChromeClient的onJsPrompt,具体里面做了什么请看PhoneGap插件调用Java流程源码分析(二),这里不是重点.

JS的调用流程:

1. 网页js调用cordova.exec

2. 调用到cordova的exec模块,初始化参数,调用nativeApi的exec

3. 根据nativeApi的情况,分两种情况调用。

4. promptbasednativeapi中,调用了prompt方法。

5. 从而在ChromeWebViewClient中回调了onJsPrompt方法,从而调用到本地方法。


最后总结一下主要的类:

CordovaActivity:Cordova Activity入口,已实现PluginManager、WebView的相关初始化工作, 只需继承CordovaActivity实现自己的业务需求。

PluginManager: 插件管理器

ExposedJsApi :javascript调用Native, 通过插件管理器PluginManager 根据service找到具体实现类。

NativeToJsMessageQueue:Native调用javascript,主要包括三种方式:loadUrl 、 轮询、反射WebViewCore执行js





阅读更多
上一篇PhoneGap插件调用Java流程源码分析(三)
下一篇Java 学习历程(一)程序执行过程
想对作者说点什么? 我来说一句

Cordova 3.x入门

2014年09月17日 7.49MB 下载

没有更多推荐了,返回首页

关闭
关闭