您的位置:首页 > 编程语言

代码总结

2015-08-14 18:10 148 查看

概述

EMP旨在帮助企业将其业务拓展到移动渠道。为此,我们提供了一个开放、易用、综合的企业移动应用平台,来帮助企业对其移动应用进行开发、实施、管理和维护。EMP平台包含了一套跨移动终端的应用开发环境,一个支持集群部署的移动应用接入网关,一个企业私有应用商店,和集成了应用管理和数据分析的管理后台。基于EMP,企业可以做到:

快速的移动应用开发,支持主流终端,良好的用户体验

快速接入已有的企业服务,整合已有的业务功能

灵活的部署和扩展,动态的企业应用、服务和业务管理

统一的推送管理、用户行为数据分析和管理

1.1 Native & Web

当智能终端用户成为企业的必争之地,移动渠道的建设对于企业来说日益重要,Native VS Web也随之成为移动应用开发技术选型的热门话题,两者在App体验和开发成本上的取舍对于企业来说,就像是鱼和熊掌,难以兼得。HTML5的出现给出了未来的方向,但HTML5自身的完善需要一个过程,不同浏览器和设备厂商对它的支持过程则更加漫长。

因此,EMP客户端组件从平台伊始就致力于Native和Web的结合,通过将一部分HTML和CSS子集映射到Native UI的实现,EMP客户端组件实现了一个跨平台的Web规范解析和渲染框架。在此基础上,我们引入了Lua作为脚本引擎来实现Lua API和设备本地语言API的绑定,并定义了Web规范以及Lua API的扩展的方式,使得设备本地的扩展最终能以Web规范的形式体现。从而让基于EMP的移动应用开发人员,可以最大程度的利用Native和Web所带来的好处。

我们在下面的章节介绍通过EMP的客户端组件可以实现的特性。

1.2 HTML & Native UI

EMP客户端组件从标准HTML标签集合中选取了一部分适合在移动终端使用的HTML标签作为EMP的HTML标签子集,并使用不同平台上的Native UI控件来实现这个子集。通过EMP HTML引擎实现从HTML标签转换为Native UI控件:



与此同时,EMP客户端组件针对每一个HTML标签,从标准CSS规范中选取了针对该标签适合在移动终端使用的CSS样式子集。通过EMP CSS引擎让这些CSS样式可以应用到其所支持的HTML标签上。



从而,EMP形成了自有的HTML和CSS规范,它们符合标准的HTML和CSS规范,在各终端平台上拥有EMP为其定义的本地实现和展现。

通过上述的实现,我们可以获取到:

Native UI的运行速度和展现效果

基于HTML和CSS语言的界面开发

基于EMP的定制扩展

1.3 Lua AS Script

1.3.1 Why Lua

由于Lua源码基于ANSI C开发,使其具有优秀的跨平台能力。

Lua是一个小巧的脚本语言, 其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。

可扩展性


Lua使用ANSI C编写而成,几乎在所有操作系统和平台上都可以编译、运行。Lua脚本可以很容易的被C/C++代码调用,也可以反过来调用C/C++的函数,这使得Lua在嵌入和扩展应用程序的场景中得以被广泛应用。不仅仅作为扩展脚本,也可以作为普通的配置文件,代替XML等文件格式,使得程序更容易理解和维护。

轻量级


轻量级Lua语言的官方版本只包括一个精简的核心和最基本的库,一个完整的Lua解释器不过200K。在目前所有脚本语言中,Lua无疑是将小巧和快速结合的最完美的一个。

其他特性


同时支持面向过程编程和函数式编程(functional programming);自动内存管理;只提供了一种通用类型的表(table),用它可以实现数组,哈希表,集合,对象;语言内置模式匹配;闭包(closure);函数也可以看做一个值;提供多线程支持;通过闭包和table可以很方便地支持面向对象编程所需要的一些关键机制,比如数据抽象,虚函数,继承和重载等。

上述特点表明,在跨平台的移动终端上,Lua是作为嵌入式脚本的最佳选择。基于这些考虑,我们选择Lua作为我们默认的脚本引擎,嵌入到页面中的Lua脚本会被EMP客户端组件解析并执行,通过将Lua API和设备API以及EMP Native Lib API的绑定,开发人员可以通过编写Lua脚本实现本地逻辑,让应用使用者获得Native App的运行速度和体验。

代码布局规则:

Br换行规则:

2.1 block元素

block元素也称为块元素,通常他们是独占一行的.其他元素遇到block元素需要换行.

2.2 br元素

br元素代表换行操作.br的换行分几种情况:

br在inline元素后:正常换行,两行间有间距.

br在block元素后:换行的同时,插入默认行高.

连续的br:第一个br按照1,2中描述处理,之后的br每个代表一个默认行高.同时最后的br与下一行之前应该有行间距.连续的br之前没有行间距.

div属于Block元素 。前后都默认有换行。

label 没有换行 。如果多个label超过了父控件宽度,则超过的那个label需要换行。

连续的br ,第一个br如果是在像div一类的块元素后,则(因为div前后默认有br)div后再加一个br的默认行高。之后的br每个代笔一个默认行高。

第一个br如果是在如label一类的inline元素后,则第一个正常换行,有5px的默认间距。之后的br每个代表一个默认行高。

总结:

c语言是万能的,底层是汇编语言实现。webkit/java/python/c++ 等底层都是由C语言来实现的。

对于html来说由于规定了W3C标准所以人们都在遵循这个标准。所以html页面可以在不同的浏览器,不同的系统中展示相同的效果。就是因为html的渲染解析内核都遵循W3C标准。例如webkit 内核。

c语言的跨平台特性也类似。因为ansi c(标准C语言 )有c89 c99 c11等标准,人们都基于这个标准写的解释器。所以底层是由ansi c实现的语言都具有优秀的跨平台特性。例如Lua。

首先页面的真正展示,Handler处理和发送消息,View更新是在GUIFactory抽象类中定义抽象方法,AndroidGUIFactory实现类中实现。整个框架中在AndroidEMPBuilder中实例化GUIFactory对象,

如果需要展示则通过实例化的GUIFactory(AndroidGUIFactory上转型实现)的对象调用onDrawElement/onXXXXXX一类的方法来发消息,然后实现元素的显示(具体的显示 利用 view.invalidate() viewGroup.addView( myview) Activity.setContentView(view) 等来通知dalvik虚拟机(用于android平台的java虚拟机)刷新androidUI界面)。

刷新UI的任务在ReFreshTask类中遍历其父类Recompose中的List(Element) mDrawQueue 绘制结点任务表。遍历list中的element并调用GUIFactory.onDrawElement(new GUIElement(传list中的element)—onDrawElement方法中传的是带有View的element结点)。GUIElement类的作用是给element绑定View。

与样式有关的是Style类 ,样式刷新通过1移位来区分。样式的内容是从报文中获取的 。解析报文的类为:ParserTask.java中 通过DOM解析传入的报文,并返回Dom结点树。报文加载首先是MainActivity中覆写onLoadStartPage(EMPRender类型参数)方法,通过emprender。loadLocalFile(文件路径) 之后到EMPTaskManager中调用loadfile()方法。最后去AndroidResources中调用createLoadTask()

执行第一个任务,这个方法返回一个InstructTask(String, String)(path—加载文件的路径)对象,如果传入的路径正确,代码中返回从文件中读取到的内容并作为下一个InstructTa
ae1b
sk(E, F)任务的输入。

第二个任务为ParserTask(把第一个任务得到的String型报文DOM解析为DOM树),(EMPDocument)得到具体的结点信息之后,

执行第三个任务Compose任务(处理DOM树剥离Style、Script、Link返回视图节点),(Analysis–>initDocument()方法)这步中把剥离出来的具体的Style在通过StyleRepository类处理包含所有Style内容的字符串(通过三个正则表达式来解析(css类名,样式结点名,样式具体的值),最后保存到一个HashMap(String, String)中)。

执行第四个任务getExecuteTask(创建执行lua脚本的任务—–EMPTaskManager类管理各个任务及执行顺序)

关于布局的内容是在layout中。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: