付柏杨,王黎黎
(中国电子科技集团公司 第二十八所,南京 210000)
基于Android移动医疗监护的设计与研究
付柏杨,王黎黎
(中国电子科技集团公司第二十八所,南京 210000)
基于自主研发的健康监护仪设备,研究如何在手机端利用有限的计算资源,实现实时接收监护仪设备上传的检测数据,并且快速、高效地并发处理、展示及存储手机端接收的检测数据,从而为疾病早发现早治疗提供数据支持。最终,利用自定义的SurfaceView,结合多线程以及缓存队列技术,很好地解决了实时监护数据的接收、处理及展示这一关键问题。
双缓冲;多线程;缓冲队列
随着生活水平的提高,以及人口老龄化趋势的日益显著,人们愈加关注家庭健康问题。加之手机智能化的发展,移动智能手机已成为人们生活必需品,同时也改变着医疗保健产业的发展方向。移动医疗、智能医疗、远程医疗成为医疗领域发展的新热点。
基于所级课题“家庭式健康监护仪”,本文主要研究智能手机终端与家庭式健康监护仪之间多种生理参数监护数据的实时交互及展示。手机终端在接收到这些数据后,经过报文解析处理,在界面上实时显示健康监护数据并进行持久化存储。然而,手机的处理性能有限,如何实现实时接收、处理并展示监护数据,是本课题研究的关键,也是本课题研究的重点与难点。
通过研究发现,目前市场上结合Android平台及便携监护仪的移动家庭式监护产品尚处于起步阶段[1],仅有国内迈瑞已研制出一款名为迈瑞UBICARE(优必康)H900的生理参数监测仪/健康一体机。该设备具备基本的家用监护功能,但还处于初期研发阶段,存在不足。
因降低成本,监护仪测量数据过于简略,如心电数据标明三导联波形,实际只有II导联一道波形;无呼吸波(RESP)、血氧描记波(PLEH)的检测功能;仅可将单次测量的一导联10 s心电波形上传至手机端作为历史波形静态展示与查看;不支持测量数据的实时交互传输。
总而言之,该款设备定位于家用,而且配套的手机端应用功能也很弱,只能作为记录单次测量结果的工具。
在课题研究中,自己研制了家庭式便携型监护设备,该设备集成电源管理模块和蓝牙4.0模块。通过最新的低功耗蓝牙4.0协议,监护设备与手机终端可实时交互监护数据、控制命令以及告警信息。设备设计如图1所示。
图1 家庭式监护仪与Android手机交互
大多数智能手机的处理资源和存储资源相对于PC机器是相当有限的,而医疗板卡对外传输的持续性监护数据量很大,本文所采用的医疗板卡发送各主要数据包的频率,如表1所示。
表1医疗板卡数据发送频率
表1所示,仅心电波形数据,每秒钟就会向外发出250个数值点,即使在非实际监护状态下,医疗板卡也会通过蓝牙向手机发送数据,只是此时的数据相当于当前心电测量参数的零值。
本文研究的移动监护APP软件,主要包括以下模块。
人机交互处理模块:负责实时处理并动态描绘接收的监护波形数据以及其他数值型健康数据,提供友好的人机界面,接收界面操作指令并向用户反馈处理结果信息。
健康数据接收处理模块:本模块通过手机端的蓝牙4.0协议接口,与监护设备建立数据连接,交互指令数据以及监护数据,并进行报文的解析与封装。
数据存储访问处理模块:该模块基于Android的Sqlite数据库,为其他模块提供监护数据增删改查的持久化操作接口。
数据通信模块:此模块提供对外网络交互接口,弥补健康监护仪的传输能力不足通过移动互联网与外部健康系统平台进行监护数据、个人信息等信息的交互。
其中,人机交互处理以及健康数据接收处理,是应用的核心部分,也是影响整个应用性能以及鲁棒性的关键,因而,这两个模块是本文着重研究与讨论的重点。
针对上节实际需求,本文借助Android SurfaceView双缓冲机制[2],采用多线程结合阻塞队列的生产者消费者模式,很好解决了人机交互以及实时健康数据的并发处理问题。
数据交互过程中,因设计或网络影响,数据发送速率与接收速率并不总是能够保证一致的。尤其当发送速率高于接收速率时,可能会出现数据丢失的情况。
3.1双缓冲机制
Android提供了两种基本画图对象:View和SurfaceView组件。View与SurfaceView在动态作图差异上的对比如下[3]:
View没有双缓冲机制,难于保存之前绘制的内容;当 View组件上图形状态数据发生变化,需要更新View组件上的图像时,必须重绘整个View组件,如果数据量大,耗时较长;View的绘图必须在当前的UI线程中进行,在更新View组件时需要借助使用Android Handler机制来处理。因而,在绘制数据量大情况下,使用View很可能会阻塞UI线程,导致手机应用出现操作卡顿。
对比后可知,View组件适合于图形数据量小,状态数据变化较少,无需记录上次数据的整体视图绘制情形,但不适合实时动态画图及频繁局部图形更新的使用场景。
相比较 View组件,SurfaceView启动新的线程,采用SurfaceHolder更新SurfaceView的组件绘制,而且通过获取SurfaceView上指定区域的Canvas,只对指定的图像区域部分进行数据更新,降低了性能消耗,提高了画面的更新速度,因而动态效果比自定义的View组件更加出色。
3.2双缓冲与多线程
在使用SurfaceView绘制波形时,由于SurfaceView是通过锁定Canvas的方式来画图,因此需要耗费时间,不能保证动态画图的流畅,特别是在数据量大的情况下,这种问题尤其明显。解决方法是采用多线程的方式,通过建立单独的子线程,在子线程中使用SurfaceView来绘制波形。
当手机端计算处理过于频繁时,会严重消耗处理资源,降低手机应用的用户体验。在实际过程中,为了保证动态实时效果且又能够减少手机CPU处理负担,本文在绘制动态波形数据时对数据进行了分段处理。如对于心电波形数据,每秒产生250个点,即4 ms产生一个点,而人动态视觉效果刷屏为60 Hz,大约16 ms刷新一次,则感受不到停顿,那么在实际处理中可以每次描绘4~5个波形数据点构成的分段波形。
3.3多线程与阻塞队列
一方面为了保证数据不会因为发送与处理速率的不同而丢失,另一方面为了使得数据接收顺序与处理顺序、展示顺序始终保持一致,因而,本文利用基于阻塞队列的生产者消费者模式,使用多线程来完成数据的接收、分发与处理。数据接收线程在接收到新的数据报文后,作为生产者将报文放入第一级的阻塞队列中,数据处理线程作为报文的消费者,从队列中获取报文并进行解析,同时数据处理线程作为下一级的生产者将解析后的报文分发到不同的阻塞队列中。
本设计中对于波形数据展示方式,参照传统监护仪器设备上的心电波、呼吸波以及血氧描记波的动态描绘效果,以小段重绘的方式动态展示,处理方式如下:
(1)采用FIFO机制,逐步擦除动态展示波形数据中最早的小段波形数据,并加入本次最新的小段波形数据,以达到与监护仪上的波形显示相同的效果。
(2)针对绘图数据量大的特点,应用接收线程在累计接收处理5个波形数据点后,交由绘图线程一次性绘制5个点的小段波形,逐段覆盖更新。
(3)控制canvas,避免图像局部变化过于频繁。
以心电II导联波形为例,基于本文的技术研究,最终在手机上实现了预期的处理及绘制效果,并可以流畅地切换显示测量的7导联心电波形(ECG)、呼吸波形(RESP)以及血氧波形(PLETH)等波形数据。
本设计中的手机监护应用App完整实现效果图,如图2所示。
图2监护应用App效果图
本文采用自定义的双缓冲机制SurfaceView控件进行动态监护波形描绘,相比于View控件,在动态波形图绘制上性能更加优越,并且大大降低了处理资源需求。同时,利用多线程和阻塞队列技术,很好的解决了实际应用中监护数据量过大以及传输处理速率不对等的问题,从而实现利用手机上有限的计算资源实时接收、处理并动态展示监护的各项生理参数数据,并且在已接入健康数据平台的情况下,可以支持将接收处理的监护数据通过移动互联网实时上传至健康数据平台。
主要参考文献
[1]柴继红,杨宏丽.基于蓝牙4.0BLE的移动心电监测系统[J].深圳职业技术学院学报,2014(5):16-20.
[2]蓝坤,张跃.Android在远程医疗信息系统中的应用[J].计算机应用,2013,33(6):1790-1792.
[3]李刚.疯狂Android讲义[M].北京:电子工业出版社,2013:393.
10.3969/j.issn.1673-0194.2016.11.108
TN919.8
A
1673-0194(2016)11-0181-03
2016-03-21