嵌入式终端桌面脚本插件化方案实现(一)

来源:互联网 发布:淘宝洛奇英雄传单机版 编辑:程序博客网 时间:2024/05/17 10:24
前言

桌面插件化一直是手机终端软件上的一个难题,如何提供一个弹性化、可扩展性强的桌面插件化框架一直是终端软件开发人员所追求的。

在山寨机上更是如此,山寨机的桌面可谓空白,更谈不上为应用开发者提供的desktop框架,插件化也是妄谈的。

本文就是介绍了一种在山寨机甚至其他平台上的终端桌面插件化的方案。

 桌面框架 
框架概要图如下:

思想也很简单,就是设计一个桌面插件容器管理插件的排版布局、插件间的调度、焦点的切换等等,然后事件当前焦点插件能够处理则处理,处理不了则给手机系统处理。
关键是插件,如何设计一个插件,这个插件到底是是个dll呢,还是个脚本?
dll有很多种需要依赖于各种中间件山寨机上中间件林立能够支持多应用N应用的也没有几个(通用性不好),并且桌面的插件个人定位在轻量级的应用上,选择脚本或更合适。
脚本选择什么合适呢?是python 还是lua,当然是lua了,基于脚本的效率还是山寨机的资源lua最为合适,当然我个人也只对lua比较熟悉。  

 
  

这个数据结构有这么几个需要注意的地方:

脚本插件句柄lua_State*L,其实lua脚本插件app是生存在一个堆栈空间里,一个脚本插件就对应一个堆栈空间,这样多个脚本插件之间的空间肯定各不相同不相互影响,这样解决了同时多个脚本插件运行的问题。

(2)虚表,其实是脚本插件对象的成员函数,用于被插件容器调用来处理插件的各种事件及状态。

插件脚本

上面解决了脚本插件的问题,实际上插件在山寨机上放的位置,插件的数目等等,都是不可控的。因为山寨机屏幕分辨率众多,而且各个DH会做自己的特殊处理,这样写死插件的显示范围显然是不合适的。另外各个机器的资源也不一,这个机器适合显示两个插件,那个机器的内存满足显示三个插件,众口难调如何解决?
既然用到了脚本,那我们从lua下手吧。且看配置Config.lua文件。

   
 Config.lua确定了桌面插件容器的显示范围,以及一行、一列显示的插件的个数,以及插件脚本的名字。
 下面则是各个插件的代码,仅仅为一简单的框架,能够处理各种事件并绘制。
weather.lua
stock.lua

插件显示效果
weather 插件active时效果 
效果1 
 
效果1 trace信息
可见weather、stock两个脚本插件都运行起来了,并且weather插件是处于active的,stock是处于deactive的。
Stock插件active时效果 
  
 效果2 

效果2 trace信息

注意下trace信息就知道实际上是发送了一个key down事件,焦点从weather插件切换到了stock插件上。

总结
至此整个桌面脚本插件化方案已经讲叙的很清楚了,接下来详细内幕只能够听下回分解了。