积分规则 网站地图 帮助中心    
嵌入式软件 单 片 机 DSP 存储器 传感控制 光电显示
嵌入式硬件 CPLD/FPGA SOPC AD/DA 接口电路 模拟设计
I C设计 通信产品 汽车电子 电源产品 消费电子 数控系统
工业控制 军工/航天 安防产品 医疗电子 计算机外设 测试测量
供应 I C
求购 公司库

  IC 求购 销售 公司 论文 DATASHEET 参考设计 论坛
当前位置: 电子技术 >> 嵌入式软件 >> JAVA
  相关分类: LINUX | WINCE | UC/OS | Bootloader | 下载 | VXWORKS | 网络协议 | JAVA | 汇编 | 驱动设计 | Symbian | XP Embedded | Nucleus | 新产品 | 相关文章 | 综合技术 |
再议j2me进度条与线程化模型
 
作者:FavoYang   来源:网络    点击数:731   更新时间:2006-9-1
您可以添加到网摘 让更多人关注此文章:

    

作者:FavoYang       Emailfavoyang@yahoo.com 欢迎交流

Keywords:线程化模型 j2me UI设计

 

内容提要:

本文是《j2me进度条与线程化模型》一文的续(以后简称原文,没看过的建议看一下)。

讨论了原文中使用的线程模型的不足,并针对她的缺点提出了新的改进办法并给出了改进后的实现。因原文中UI部分有灵活的扩展性,未作更改。

 

 

前台UI如何和后台线程交互

原文中模型,是一个前台的ProgressGaugeUI与后台线程无关的模型。这样设计的时候最大程度上的化简了通信的复杂性,实际上是一种单方向的模型(由BackgroundTask PGUI通信)。按照这种模式的要求,程序员在Override BackgroundTask runTask()方法时,有义务定期的去查训前台的PGUI的运行情况,并根据这种情况做出反映。这样这种模式完全相信后台线程,将是否响应用户cancel命令的权利交给了后台线程,如果后台线程陷入麻烦没有响应了(比如访问一个很昂贵的网络连接),此时用户试图cancel也没有用,程序将会暂时的死锁,直到后台线程有时间去检查前台的状态。并且在实际情况中,到底什么时候去查询,多大的频率都是问题。在代码段中过多的此类代码,会影响对正常的流程的理解。

 

从下面的这个顺序图,可以看到这个具体流程:

 

我们需要一个方法,让我们能够强制的结束Task。这个方法由背景线程自己提供,取名叫做cancel()。当然没有任何一个方法可以强迫线程立即结束(曾经有,因为安全性问题而被取消)。所以cancel()方法往往通过关闭的资源(一个连接,一个流等)来迫使runTask发生异常被中断,runTask有义务根据自己的约定捕捉此类异常并立即退出。一图胜千言,让我们看看这种方法的流程。

 

很显然的,关键在于前台的线程对后台的线程进行了回调,这样就可以解决问题了。但是新的问题来了,这样做迫使我们将前台与后台线程紧密的耦合在了一起(因为要回调嘛)。能不能既实现回调又避免前台UI与后台线程的紧密耦合呢?

 

通过Cancelable接口降低耦合度

幸好,我门可以利用接口来实现这一点。

先前的模型是这样的:

为了降低耦合,我们建立一个接口

public interface Cancelable {

    /**

     * 本方法非阻塞,应该立即返回(如有必要开启新的线程)

     * 此外应避免对此方法的重复调用

     */

    public void cancel();

}

接下来在ProgressObserver加入对这个方法的支持

public interface ProgressObserver {

    ……

    ……

    /**

     * 设置取消Task时回调的函数对象

     * @param co

     */

    public void setCancelalbeObject(Cancelable co);

}

 

这样,就可以在用户按下取消按钮的时候,就可以进行对Cancelable.cancel()的回调。这样灵活性大大增强了。

 

新代码

    更新后的代码如下,除了改用以上的模型外,还对部分的BUG进行了更正,更改的地方会用不同的颜色表示。详细的用法可参见注释

 
点击浏览该文件



相关文章
· 科技奥运与计算机技术的应用[405]
· Electromedical[2669]
· 患者监控[2726]
· 基于TMS320LF2407A DSP的心电监护系统研究[3166]
· 用S3C2410实现三导联远程心电监护系统[3083]
热门评论排行
·VHDL设计中电路简化问题的
·ARM嵌入式系统基础教程(N
·江苏嵌入式Linux教育培训
·ARM处理器应用开发4步骤
·锐极LINUX驱动培训班定于

文章评论
    没有任何评论
*只显示最新10条评论。评论内容只代表网友观点,与本站立场无关。更多评论
发表评论
  * 请先[登陆]再进行评论,谢谢。
评分: 1分 2分 3分 4分 5分
内容: *
发帖须知:
一.所发文章必须遵守《互联网电子公告服务管理规定》;
二.严禁发布供求代理信息,公司介绍,产品信息等广告宣传信息;
三.严禁恶意重复发帖;
四.严禁对个人,实体,民族,国家等进行漫骂,污蔑,诽谤。
 
热点新闻 [更多]
 
避免危及半导体业 德出手挽
HP实验室展示集CMOS电路与忆阻器
全球第二大代工巨头伟创力瘦身应对金融
Vishay Silico
奥地利微电子发布全球首款具有嵌入式比
采用 4mm x
未来MEMS产业恐缩水 车
iSuppli发布08年半导体厂商初
飞兆半导体指控英飞凌专利侵权
全球三大晶圆代工巨头齐遇冷 
 
热门下载 [更多]
 
[ PCB设计] Protel99教程下载
[ ] 手把手学单片机20个例
[ ] 单片机做的智能台灯
[ ] 单片机入门书
[ ] linux系统移植开发文档
[ ] IC卡的读写程序
[ ] 8051单片机C语言彻底应用
[ 常用软件] 555定时器电路设计软件V1.2
[ 常用软件] 51定时器计算软件
[ ] ARM处理器应用开发4步骤
 
论坛新帖 [更多]
 
嵌入式十三法则...
基于CPLD和单片机的任意波形...
电子行业的发展方向...
单片机-超低价专业PCB打样...
超低价专业PCB打样 双面板...
[原创]主题:移动开发平台的建...
[原创]正弦脉宽调制(SPWM...
[推荐]Agilent8590...
[推荐]HP8591E HP8...
[推荐]Agilent8711...

 
赞助商 [更多]
 

ICP许可证号:[粤 05056597]
联系电话:010-82517432 82517615 传真: 010-82517615

版权所有 Copyright © 2006 嵌入式技术网