分享好友 最新资讯首页 最新资讯分类 切换频道
<HTML5 + Docker>的插件集装箱
2024-12-28 05:28

AndroidDocker一致架构设计(5)

-- <HTML5 + Docker>的插件集装箱

 

By 高焕堂 (台灣Docker論壇 主席)

2015/03/16  misoo.tw@qq.com 

ee                                                                                                             ee

高煥堂的相關文章:

  A01、从「集装箱」思考Docker风潮:Docker潮流下的赢家策略

  A02、Docker:从容<器>到集装箱设计之<道>

  B01、Android和Docker的一致架构设计(1):追求今天决策的未来性

  B02、Android和Docker的一致架构设计(2):包装<跨集装箱>的通信协议

  B03、Android和Docker的一致架构设计(3):建立企业主的<核心集装箱> 

  B04、Android和Docker的一致架构设计(4):<分合自如>的设计模式

  

  大家都知道,PhoneGap是基于HTML,CSS和JavaScript的跨平台移动App软件框架。例如,它能搭配HTML5来支持Web App的开发,并可发挥本地(Native)设备的功能,包括地理定位、加速器、联系人、声音和振动等。此外,PhoneGap还可以有效管理各种插件(Plugin),提供给HTML5应用来调用。于是,本文从HTML5跨平台的视角来看Docker、Android与PhoneGap的整合架构设计。让架构师扩大视野,涵盖终端和云平台,以一致的架构设计思维,追求决策未来性,开创产品的不一样生命。

  

例如,一般的语言表达Android的WebView的一段JavaScript语言:

// show.html (JavaScript程序代码)

<input type="button" value="Say hello" onClick="jsShow('Hello Android!')" />

<script type="text/javascript">

    function jsShow(str) {

        IToast.showToast(str);

    }

</script> 

当WebView(含幕后的Webkit里的其它类别)解析(执行)到其指令:

        IToast.showToast(str); 

就会去呼叫一段扩充的(Extended)的Java程序码(或称类别): 

// myToast.java (Java程序代码)

public class myToast{

        Context mContext;

    myToast(Context c) {

        mContext = c;

    }

    public void showToast(String str) {

        Toast.makeText(mContext, toast, Toast.LENGTH_SHORT).show();

    }

} 

于是,上面的JavaScript程序代码就透过WebView而呼叫到这个showToast()函数了。那么,这两段程序代码之间,又由谁来建立其连结关系呢? 那就依赖另一段程序代码了,就是: 

// myActivity.java

public class myActivity extends Activity {

    @Override

    public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

WebView appView = new WebView(this);

appView.loadUrl("file:///android_asset/www/index.html");

appView.getSettings().setJavaScriptEnabled(true);

 

myToast obj = new myToast();

appView.addJavascriptInterface(obj, "IToast");

appView.loadUrl("file:///android_asset/show.html");

 

setContentView(appView);

    } 

其中的指令:   

    myToast obj = new myToast(); 

就诞生一个myToast类别的对象。接着, 

    appView.addJavascriptInterface(obj, "IToast"); 

就将该对象的参考(Reference)传递给WebView,这建立了WebView与myToast类别(对象)之间的链接关系。让WebView在执行JavaScript程序代码时,可以来呼叫myToast类别里的showToast()函数。首先,以图形表达出来:WebView与Android框架的关系:

    图-12、 WebView是Android框架的一部分

  然后,以图形来表达JavaScript程序代码(即show.html)和myToast类别,如下图:

 再以图形来表达myActivity类别,如下图:

    图-14、 myActivity继承Activity基类

 由myActivity类别来诞生WebView对象,也诞生myToast对象,如下图:

  接着,由myActivity呼叫WebView的addJavascriptInterface()函数,将myToast对象的参考(Reference)传递给WebView对象,这建立了WebView与myToast类别(对象)之间的链接关系。如下图: 

 接着,由myActivity呼叫WebView的loadURL()函数去将show.html载入到WebView里,如下图: 

 建立了链接关系之后,JavaScript的jsShow()函数就能透过WebView而呼叫到myToast的showToast()函数了,如下图: 

  从图里可以看出来,JavaScript模块(即jsShow()函数)与Java模块(即myToast类别)之间的相依性(Dependency)非常高,也就俗称的<高耦合性>,所以很不利于JavaScript模块的跨平台,也连带导致HTML5代码的框平台要求。因而有了PhoneGap框架来化解上述的不利情形。搭配PhoneGap的新架构就如下图所示: 

  由于IPlugin接口只提供单一函数:execute();使得PhoneGap也只能提供单一函数:exec()。然而,在HTML5_JS里可能有多个函数,例如play()和stop()等。于是,在HTML5_JS里,必须从play()和stop()函数转而呼叫PhoneGap.exec(),然后透过WebView而调用IPlugin接口的execute()函数;最后转而调用myPlugin的mpPlay()和mpStop()函数。其中的接口转换过程,以程序代码表达如下: 

var myProxy=function(){};   

myProxy.prototype.play = function(success, fail, para1, para2){

    return PhoneGap.exec( success, fail,

                'myPlugin',       //java类别名称,注册于plugins.xml中

                'mpPlay',         //在Plugin里用来配对的action名称

                [para1, para2]     //所传递的参数(parameter),Array结构

    );

};

myProxy.prototype.stop = function(success, fail, para1, para2){

    return PhoneGap.exec( success, fail,

                'myPlugin',       //java类别名称,注册于plugins.xml中

                'mpStop',        //在Plugin里用来配对的action名称

                [para1, para2]     //所传递的参数(parameter),Array结构

    );

};

PhoneGap.addConstructor(function() {

    PhoneGap.addPlugin('myProxy', new myProxy());

});

   此时,HTML5_JS里面就看不到PhoneGap.exec()函数了,其好处是:一方面让HTML5_JS程序代码比较单纯;另一方面,让HTML5_JS与PhoneGap.exec()两者相依性(Dependency)降低,让HTML5_JS不受制于PhoneGap的框架API。因而HTML5实现了完美的跨平台特性。

 

4结语

   人们不会期待一辆完整汽车既能在沙滩上跑,也能街道、高山、雪地里跑。 

最新文章
Vnlin合联物流与您相约第十届中国跨境电商生态创新大会
第十届中国跨境电商生态创新大会将于2024年12月27-28日在北京新世界酒店举办Vnlin合联物流将亮相大会现场诚邀您莅临洽谈交流企业
松鼠Ai发布首个智适应教育大模型 “卷”起了大模型应用
一场由ChatGPT引发的AI大模型狂热,至今仍在持续。在人工智能技术的飞速发展下,大模型作为其核心分支,已在全球范围内引发了一
百度如何开通珠宝直播?百度直播珠宝平台怎么开通?分享
1在手机的主页,点击进入百度。2进入后,点击右上角的更多选项。3在出现选项中,点击开直播选项。4此时点击开始视频直播即可。百度
免插件打造wordpress投稿页面
到这里就已经完成了投稿页面模板的制作,你现在要做的就是在wordpress后台,新建文章页面,选择tougao这个模板文件就可以实现投
【TRU(移动4G)腾讯手机管家下载】阿尔卡特TRU 移动4G腾讯手机管家16.1.19免费下载
腾讯手机管家专注手机骚扰拦截,动态守护手机安全,深度清理微信、QQ缓存,让手机体积减半,拒绝卡慢。---认真服务---【骚扰拦截
用AI绘画生成超逼真美女写真-一键打造你的AI女友
限时免费,点击体验最近超火的AI生图神器,坐拥3000美女的大男主就是你! https://ai.sohu.com/pc/generate/textToImg?_trans_=0
纽扣助手破解版游戏纽扣助手下载
纽扣助手破解版游戏纽扣助手下载是一款非常独特的游戏社区工具,为喜欢玩游戏的用户带来更多乐趣体验。界面布局设计非常精细。它
腐漫画app2021版下载
腐漫画,看不完。《腐漫画2021版》是一款超级强大的漫画神器,在腐漫画软件内,超多的免费的漫画资源,任你自由的观看。每天都有
退役报到,一键登记——全新小程序助力军人便捷报到
本文目录导读:小程序的功能亮点小程序的操作方法尊敬的听众朋友们,大家好!我是你们的播音员,今天我要为大家介绍一款便民利民
论坛营销发外链应注重的6大事项
论坛签名是很普遍的发外链方式之一(南宁网站制作),上次已经写了网络伦原创:外链先要数量还是要质量,已经讲的很清楚了,假如做