关闭

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

标签: phonegap源码框架java插件
663人阅读 评论(0) 收藏 举报
分类:

                                           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





0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:23612次
    • 积分:522
    • 等级:
    • 排名:千里之外
    • 原创:25篇
    • 转载:21篇
    • 译文:0篇
    • 评论:3条
    最新评论