Cordova Android源码分析系列一(项目总览和CordovaActivity分析)_第1页
Cordova Android源码分析系列一(项目总览和CordovaActivity分析)_第2页
Cordova Android源码分析系列一(项目总览和CordovaActivity分析)_第3页
Cordova Android源码分析系列一(项目总览和CordovaActivity分析)_第4页
Cordova Android源码分析系列一(项目总览和CordovaActivity分析)_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 PhoneGap/Cordova是一个专业的移动应用开发框架,是一个全面的WEB APP开发的框架,提供了以WEB形式来访问终端设备的API的功能。这对于采用WEB APP进行开发者来说是个福音,这可以避免了原生开发的某些功能。Cordova 只是个原生外壳,app的内核是一个完整的webapp,需要调用的原生功能将以原生插件的形式实现,以暴露js接口的方式调用。       Cordova Android项目是Cordova Android原生部分的Java代码实现,提供了Android原生代码和上层Web页面的javascript通讯接口。本系列文

2、章主要分析Cordova Android框架代码的实现。通过深入分析cordova Android源码的实现,我们在开发HybridApp时可以更从容,知道Cordova的插件的工作原理,开发cordova插件整合自己的功能模块,在实现web应用时避开js和webview的一些坑,开发出高质量的混合应用。       项目源码可以在/repos/asf找到,上面展示了cordova全部子项目的git地址。当你创建cordova应用,并通过cordova platform add Android命令添

3、加android平台后,在应用的platforms/android/CordovaLib/src/org/apache/cordova目录下面可以找到Cordova Android框架代码。       cordova3.5版本Android核心框架一共有27个Java文件,代码量不算大。从cordova3.0版本以后,所有的设备能力API都从cordova核心框架分离出去,变成了插件,各平台分别进行原生实现,例如访问设备信息的Device插件,访问网络状态的Network Information插件,目前官方网站一共收录了250个插件。下面是 

4、;Cordova Android的整体UML类图,从这张图上我们看出核心框架和插件之间的关系,插件需要实现CordovaPlugin接口。Cordova框架类图   · CordovaInterface接口分析           CordovaInterface是Cordova应用的底层接口,CordovaActivity需要实现这个接口。用来隔离Cordova插件开发,隔离插件对Cordova核心库的直接依赖。   主要方法有startActivityForResult,setAc

5、tivityResultCallback,getActivity,onMessage,getThreadPool这几个接口方法。具体的实现在CordovaActivity中。    java view plain copy 1. /* 2.  * The Activity interface that is implemented by CordovaActivity. 3.  * It is&#

6、160;used to isolate plugin development, and remove dependency on entire Cordova library. 4.  */  5. public interface CordovaInterface   6.   7.     /* 8.   

7、;   * Launch an activity for which you would like a result when it finished. When this activity exits, 9.      * your onActivityResult() method will&#

8、160;be called. 10.      * 11.      * param command     The command object 12.      * param intent      The intent&#

9、160;to start 13.      * param requestCode   The request code that is passed to callback to identify the activity 14.      */  15.   

10、60; abstract public void startActivityForResult(CordovaPlugin command, Intent intent, int requestCode);  16.   17.     /* 18.      * Set the plugin to be c

11、alled when a sub-activity exits. 19.      * 20.      * param plugin      The plugin on which onActivityResult is to be called 21.  

12、;    */  22.     abstract public void setActivityResultCallback(CordovaPlugin plugin);  23.   24.     /* 25.      * Get the Android activity

13、. 26.      * 27.      * return the Activity 28.      */  29.     public abstract Activity getActivity();  30.      

14、 31.   32.     /* 33.      * Called when a message is sent to plugin. 34.      * 35.      * param id    &

15、#160;       The message id 36.      * param data          The message data 37.      * return    

16、0;         Object or null 38.      */  39.     public Object onMessage(String id, Object data);  40.       41.  

17、60;  /* 42.      * Returns a shared thread pool that can be used for background tasks. 43.      */  44.     public ExecutorService 

18、;getThreadPool();  45.   · CordovaActivity核心类分析       CordovaActivity是Cordova应用的入口类,用户用来加载html页面的Activity需要继承这个Activity。CordovaActivity会读取Cordova配置文件res/xml/config.xml中的配置。       CordovaActivity继承了Android Activity,实现了CordovaInterface接口

19、。       比较重要的成员变量有CordovaWebView appView,CordovaWebViewClient webViewClient,用Executors.newCachedThreadPool()初始化了一个线程池threadPool,创建了Activity返回时的回掉插件activityResultCallback,还有就是启动画面splashscreen的一些变量等。CordovaActivity继承了Activity,因此的它的生命周期和Activity一样,我们可以按照Activity生命周期的顺序开始看代码。 &#

20、160;   首先看OnCreate方法,首先调用了Config.init(this)方法,读取config.xml文件初始化配置,看Config.java的源码可以知道,该方法主要初始化了url白名单,背景颜色,是否全屏,载入页面超时时间(默认20s),启动画面延时(默认3s)等。然后是读取Intent Extra中等一些参数,设置是否显示标题,是否全屏等。接下来是读取屏幕宽度和高度,创建一个LinearLayoutSoftKeyboardDetect。LinearLayoutSoftKeyboardDetect这个类是用来检测软键盘是否弹出的,主要是重写了onMeasure方法,

21、当软键盘弹出,高度发生变化时发送 app.appView.sendJavascript(“cordova.fireDocumentEvent(hidekeyboard);")事件。我们自己的cordova应用在重新onCreate方法时会依次调用下面的方法。 java view plain copy 1. super.onCreate(savedInstanceState);  2. super.init();  3. / Set by <content sr

22、c="index.html" /> in config.xml  4. super.loadUrl(Config.getStartUrl();   CordovaActivity类UML图           onResume方法首先重新调用了Config.init(this)方法,然后判断是否是第一次启动,如果是则直接返回,否则会调用appView.handleResume方法,该方法会触发JavaScript事件cordova

23、.fireDocumentEvent(resume),并通知pluginManager,最后进行计数。       onPause方法比较简单,当appView不为空时调用appView.handlePause方法,然后去掉启动画面SplashScreen。       onDestroy,onNewIntent,postMessage,sendJavascript,showWebPage方法的实现也和onPause方法类似,都是调用了appView的相关方法。      方法addService(String serviceType, String className) 用来添加Service,这个方法已经降级了,以后应该在res/xml/plugins.xml文件添加。      startActivityForResult方法首先给回

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论