美文网首页
Appcan Engine学习笔记之Engine初始化

Appcan Engine学习笔记之Engine初始化

作者: 白狼syc | 来源:发表于2019-02-22 19:45 被阅读0次

    本篇博客简单的总结了 Appcan平台中Engine的初始化过程,博客中的代码参考官方开源项目appcan-android,该篇文章已经同步至ShaoYanCe的博客

    平台概述

    Appcan什么,可以用来做什么?

    广义上,AppCan是一套完整庞大的、云端一体的移动PaaS平台,拥有覆盖移动应用全生命周期的产品体系,同时服务2D开发者(工具)、2B企业(移动化、数字化)、2G政府(双创)。

    技术原理
    AppCan是基于HTML5技术的Hybird跨平台移动应用开发工具。

    开发者利用HTML5+CSS3+JavaScript技术,通过AppCan IDE集成开发系统、云端打包器等,快速开发出Android、iOS、WP平台上的移动应用。
    平台构成

    IDE工具:基于Eclipse定制的移动集成开发环境。

    应用引擎:支持HTML5应用运行的支撑平台。

    插件API:扩展方式,原生能力,通过标准化接口调用。

    JS SDK:对底层的接口进行高级封装的开发库。

    开放服务:标准接口,无限扩展的互联网能力。

    UI框架:界面外观,包括布局、颜色、风格等。

    从官方文档可以知道Appcan是一个移动应用开发平台,用它可以实现移动应用的混合开发。使用该平台提供的ide开发HTML5应用(也称为微应用),然后将代码发送到云端打包服务器(也可以使用本地编译打包),通过服务器打包脚本来打包生成apk,下方图片是Appcan的平台构成(摘自官方)。

    image

    应用引擎(Engine)是支持HTML5应用(微应用)运行的支撑平台,负责原生和h5 之间的交互,属于一个比较重要的组件,这篇博客首先学习一下Engine的初始化。

    Engine的初始化

    Engine的初始化方法initSync一般在Application的onCreat()中进行调用,初始化的方式有同步和异步两种。

      public void onCreate() {
            super.onCreate();
            AppCan.getInstance().initSync(this.getApplicationContext());//有些插件需要在别的进程初始化,因此最好在Application.onCreate()里面初始化引擎,或者将反射调用部分抽离出来
        }
    

    异步初始化

    异步初始化主要是开启了一个子线程,在子线程中调用同步初始化方法进行初始化。

        public void init(final Context context, final OnAppCanInitListener initListener) {
            new Thread(new Runnable() {
                @Override
                public void run() {
                    boolean result=initSync(context);
                }
            }).start();
        }
    

    同步初始化

    Engine同步初始化的方法为initSync(), 在类AppCan中调用,该类是一个单例,初始化具体代码如下:

    
        public boolean initSync(Context context){
            mContext=context.getApplicationContext();
            //如果context不是全局上下就返回false
            if (!(mContext instanceof Application)){
                return false;
            }
            //创建一个EngineEventListener添加到监听Engine推送事件的队列中
            mListenerQueue = new ELinkedList<EngineEventListener>();
            PushEngineEventListener pushlistener = new PushEngineEventListener();
            mListenerQueue.add(pushlistener);
            BDebug.init(); //log工具类
            BConstant.app = (Application) mContext; //将应用的上下文赋值给BConstant(专门用来存放常量)的app属性,方便使用
            DiskCache.initDiskCache(mContext);//???
            ACEDes.setContext(mContext); // ACEDes 主要负责加密
            EUExUtil.init(mContext);//EUExUtil初始化,EUExUtil主要用来反射获取布局文件,以及布局文件中的一些属性
            WebViewSdkCompat.initInApplication(mContext);//???
            mCrashReport = ECrashHandler.getInstance(mContext); //??? 捕获崩溃日志
            initPlugin();// 第三方插件的初始化
            //清除上次运行的Session 数据
            SpManager.getInstance().clearSession();
    
            //获取assets/widget 中的widget,assets的widget中没有config.xml则获取默认的widget
            //mWidgetData != null并且它的m_indexUrl不为null则说明Engine初始化完成
            WDataManager wDataManager = new WDataManager(mContext);
            if (wDataManager.isHasAssetsWidget()) {
                mWidgetData = wDataManager.getWidgetData();
            } else {
                mWidgetData = wDataManager.getDefaultWidgetData();
            }
            boolean success=isInitSuccess();
    
            //BUtility???
            if (success) {
                BUtility.initWidgetOneFile(mContext, mWidgetData.m_appId);
            }
    
            //拦截application生命周期中的onApplicationCreate()
            reflectionPluginMethod("onApplicationCreate");
    
            return success;
            }
    

    从上边的初始化代码可以总结出Engine在初始化的工程中主要做了以下事情:

    1. 创建一个队列,该队列中存放了EngineEventListener,主要用来监听Engine中窗口的打开,关闭等事件,在初始化的时候先创建了一个pushlistener(推送相关),放入到该队列中。
    2. 日志工具类BDebug的初始化
    3. 将应用的上下文mContext赋值给BConstant的app属性(这点比较巧妙,以后使用mContext的时候就比较方便)
    4. 负责加密的工具类ACEDes 初始化
    5. EUExUtil初始化 : 主要负责反射获取布局文件以及文件中的属性
    6. WebViewSdkCompat的初始化(具体作用待研究???)
    7. ECrashHandler : 捕获Engine崩溃的类
    8. <font color="green">初始化第三方插件 , 这个比较重要<font>
    9. 通过SpManager清楚上次运行的session
    10. 判断Engine是否初始化成功
      判断的标准就是:mWidgetData != null && m_indexUrl!=null
    11. 拦截application声明周期中的onApplicationCreate()
    12. DiskCache 的初始化(具体作用有待研究)

    *** 博客编号: 22 ***

    相关文章

      网友评论

          本文标题:Appcan Engine学习笔记之Engine初始化

          本文链接:https://www.haomeiwen.com/subject/llkyyqtx.html