基于Android的医疗设备管理软件离线后数据的处理方法
2019-04-29徐志扬杨玉志查晓俊陈健赵兴群
徐志扬,杨玉志,查晓俊,陈健,赵兴群
1. 南京鼓楼医院 临床医学工程处,江苏 南京 210000;2. 东南大学 生物科学与医学工程学院,江苏 南京 210008
引言
随着医疗行业发展,医疗设备已经成为医院医疗、科研、教学必不可少的基础和保障[1-3],对医疗设备的管理质量直接影响医院的经济效益。医院设备管理部门工作主要集中在以下几个方面:采购计划拟定、调研招标、验收培训、维修保养、计量巡检、盘点质控、租用报废[4-5],设备管理软件也会根据这些工作内容有针对性的设计相应模块实现日常工作需求。
越来越多的设备管理软件已从原先PC端移植到移动端,目的是能够实现便捷、实时[6]的查询、登记等工作。目前移动端必须接入无线网络或4G网络才能实现与设备管理系统的后台服务器相连,而目前多数医院不能实现每个角落都能覆盖无线网络,为了能真正实现全方位、随时随地的便捷操作体验,附带缓存功能的存储方式可以提供一些解决思路。
1 适用Android系统的离线存储的方式
1.1 SharedPreferences储存技术
SharedPreferences储存技术是Android提供用来存储简单配置信息的一种机制[7],适用于存储一些键值对[8]如用户名、密码员工信息等,不经常改变且不作为查询工作重点的数据缓存均可已使用。SharedPreferences实际上是一个接口如图1所示。
完成存储功能需实现接口中Editor、OnSharedPreferen cesChangedListener两方法。存储的信息以XML文件的形式保存在/data/data/PACKAGE_NAME/shared_prefs目录下。实现服务器地址存储关键代码如下:
操作简单但存储效率低,多数用于用户对软件系统的设置存储。
图1 SharePreferences结构图
1.2 Android系统文件(files)技术
该存储技术主要适用于下载图片、音频、资源包等数据量相对较大的文件。保存方式基本上有两种选择:一种是手机内部储存ROM[9],另一种是外部储存(SD卡、TF卡等)。在使用时应注意,外部存储对数据的保护较少,所以一些重要的没有加密的数据不建议保存到外部存储中,例如员工的基本信息等。File实际上是Android中的类,它是将JAVA中IO流包装后的一种应用,IO流结构图如图2所示。
图2 IO流结构图
File类是对文件系统的中的文件以及文件夹进行对象的封装。可以通过对象的思想来操作文件以及文件夹。在使用时需要import java.io.*包,使用ROM或SD卡进行数据存储时需要在AndroidMainfset.xml文件中进行权限的配置:
该存储方式,可以先将工作中常用的图片、文件数据离线缓存在手机中,如医疗设备的SOP,使用手册、常见故障说明,即使在没有网络的角落里工程师也能查看设备的相关信息。
1.3 内置数据库SQLite
SQLite是一个嵌入式SQL数据库引擎。与大多数其他SQL数据库不同,SQLite没有单独的服务器进程。SQLite直接读写普通磁盘文件,它遵守ACID的关联式数据库管理,即使在网络、电力、系统崩溃时也会实现其原子性(Atomic)、一致性(Consistent)、隔离性(Isolated)和持久性(Durable)的可序列化事务[10]。占用空间极小,在嵌入式设备中应用广泛。SQLite具有以下几种常用的数据类型。
NULL:这个值为空值。
TEXT:值为文本字符串,使用数据库编码存储,方式:TUTF-8,UTF-16BE、UTF-16-LE)。
VARCHAR(n):长度不固定且其最大长度为n的字串,n不能超过4000。
CHAR(n):长度固定为n的字串,n不能超过254。
INTEGER:值被标识为整数,依据值的大小可以依次被存储为 1,2,3,4,5,6,7,8。
REAL:所有值都是浮动的数值,被存储为8字节的IEEE浮动标记序号。
BLOB:值是BLOB数据块,以输入的数据格式进行存储,与输入数据完全相同,不改变格式。
DATA:包含了年份、月份、日期。
TIME:包含了小时、分钟、秒。
为了方便使用SQLite数据库可以借助一些第三方基于Android数据库框架如LitePal,Litepal是一款开源的数据库框架,采用对象关系映射(ORM)模式,将SQLite数据库功能进行封装,可以不用写一行SQL语句就可以完成创建表、增删改查的操作[11]。并且很轻量级,jar包不到100 K,几乎零配置。在具体使用Litepal前需在项目的assets目录下面新建一个litepal.xml文件:
</litepal>用于声明数据库名称和版本号。在新建的数据库类中完成数据类型配置后,就可以使用java语言进行数据库操作,关键代码如下:
可以看出这类数据库离线缓存非常适合管理软件主要信息的存储,设备信息其实就是一张张关系型数据网络,设备名称、编码、品牌、型号、使用科室、购置价格、开机时间、故障次数等等都可以以一定的数据类型缓存在内存中占用空间很小的SQLite数据库内。包括一些文字型工作记录在没有网络时也可以离线保存至数据库,待系统联网后上传到网络服务器或云端,操作者不需要担心自身工作记录是否受到环境网络的影响。
1.4 网络缓存Cache
缓存与持久储存区别在于缓存文件并不能保证持久。与PC端相似,网络缓存储存在RAM中,内存低的时候,Android系统会优先删除这些缓存文件,而持久存储的文件在卸载应用时才被删除的。所以网络缓存适用于在同一时间段内多次访问相同网络信息,信息内容数据量不大,无需实时监听的情况。Google推出的网络通信框架Volley,特别适合处理数据量小的网络操作,Volley内部实现流程如图3所示[12-13]。
图3 Volley内部流程图
Volley优点是内部封装了异步线程,可直接在主线程请求网络,Volley会检查这个请求是否可以从缓存中得到,如果可以,缓存将负责读取,解析,和分发。如果没有缓存,则创建网络请求[14](RequestQueue)将请求传递给网络线程,处理返回的结果,在创建网络请求的同时也会创建一个DiskBasedCache对象,该对象自动将网络响应同步进行缓存,软件中内置的CacheDir目录下的volley文件夹就是DiskBasedCache硬盘缓存目录。Volley缓存的数据其实包括字符串数据、json数据、图片。管理软件得到缓存数据方法也比较方便:
在实际软件运行时遇上前一秒有网络信号,后一秒就没有时,用户请求同一数据就不会出现请求失败的情况,很大程度的保证了用户使用的流畅性。
2 数据存储总体框架及测试结果
不同的数据存储方式都有各自的优缺点,不同特点的数据应该用不同的数据存储方式,以满足软件设计的最优化。分析管理软件所涉及的数据类型总结成如图4所示。
图4 数据类型关系表
在处理这些数据时根据数据在实际应用中的特点选择合适存储方式,遵循几点原则:① 影响用户实时操作体验的数据尽量能实现离线读写;② 体积较小的键值对且不常改变的数据用SharedPreferences;③ 格式为图片、文档等体积较大的阅读类数据根据用户需求使用 files功能下载至本地,不需要下载时使用Web Cache缓存在内存中;④ 关联信息、键值对较多的数据用SQLite存取;⑤ 临时状态、编号等数据用可被自动清除的Web Cache技术。数据存取应用框架如图5。
实际测Web Cache功能,网络断开时使用Toast提示用户断网状态,但数据显示正常如图6。
实际耗时对比如图7所示,软件需要在断网后持续请求8 s左右时间,展示缓存内数据,8 s主要是网络等待,实际从缓存中读取数据并进行展示,仅需271 ms,几乎可忽略不计。
图5 数据存取框架图
图6 正常联网与断网数据获取后展示界面
图7 正常联网和断网后数据展示耗时
3 结语
随着高速4G移动网络信号的全面覆盖及医院信息化建设的稳步发展,医院无线网络也迎来了新时代,但是医院结构复杂,很多功能科室如放射科、手术室、层流病房等如果不添加移动信号增强设备就会出现断网现象,更何况有些设备管理软件专用网络还没有能全面覆盖。无论哪种网络框架模式想要配合扫码技术[15-16]实现实时、便捷的操作体验,就必须要求管理软件在离线时对数据有一定的处理能力。结合几种基于Android数据读存储方法,能够有效地提高软件的使用率,从而发挥管理软件对设备的全生命周期进行了实时监控的功能,提高医院医疗设备的管理水平。