PhoneGap插件调用Java流程源码分析(四)
来源:互联网 发布:mac怎么切换下载淘宝 编辑:程序博客网 时间:2024/06/05 15:28
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
- PhoneGap插件调用Java流程源码分析(四)
- PhoneGap插件调用Java流程源码分析(一)
- PhoneGap插件调用Java流程源码分析(二)
- PhoneGap插件调用Java流程源码分析(三)
- PhoneGap插件开发流程
- phonegap源码分析
- 【OpenVswitch源码分析之四】控制面关键接口与调用流程
- twemproxy源码分析之四:处理流程
- Tiled源码分析(四): 插件机制
- eMule源码主要调用流程分析
- Java 源码分析(四)
- JNI实现源码分析【四 函数调用】
- Java NIO框架Netty教程(四) – ServerBootStrap启动流程源码分析
- Java NIO框架Netty教程(四) – ServerBootStrap启动流程源码分析
- Java NIO框架Netty教程(四) – ServerBootStrap启动流程源码分析
- Java NIO框架Netty教程(四) – ServerBootStrap启动流程源码分析
- Java NIO框架Netty教程(四) – ServerBootStrap启动流程源码分析
- Java NIO框架Netty教程(四) – ServerBootStrap启动流程源码分析
- Linux系统启动任务的写法
- iOS开发 - Xcode SVN提交字母示意
- codeforce 596B
- proguard混淆打jar包
- java通过反射Method、属性字段名、值、数据类型
- PhoneGap插件调用Java流程源码分析(四)
- 学习C++ vector(摘录)
- 在启动页中判断是否自动登录
- 看到C上这么多努力的大神有感
- 工作中的程序员如何进阶
- JAVA 定时器时间格式
- CentOS 7 设置静态IP
- iOS获取设备的语言
- javascript Date format(js日期格式化)