付柏楊,王黎黎
(中國電子科技集團(tuán)公司 第二十八所,南京 210000)
基于Android移動醫(yī)療監(jiān)護(hù)的設(shè)計(jì)與研究
付柏楊,王黎黎
(中國電子科技集團(tuán)公司第二十八所,南京 210000)
基于自主研發(fā)的健康監(jiān)護(hù)儀設(shè)備,研究如何在手機(jī)端利用有限的計(jì)算資源,實(shí)現(xiàn)實(shí)時接收監(jiān)護(hù)儀設(shè)備上傳的檢測數(shù)據(jù),并且快速、高效地并發(fā)處理、展示及存儲手機(jī)端接收的檢測數(shù)據(jù),從而為疾病早發(fā)現(xiàn)早治療提供數(shù)據(jù)支持。最終,利用自定義的SurfaceView,結(jié)合多線程以及緩存隊(duì)列技術(shù),很好地解決了實(shí)時監(jiān)護(hù)數(shù)據(jù)的接收、處理及展示這一關(guān)鍵問題。
雙緩沖;多線程;緩沖隊(duì)列
隨著生活水平的提高,以及人口老齡化趨勢的日益顯著,人們愈加關(guān)注家庭健康問題。加之手機(jī)智能化的發(fā)展,移動智能手機(jī)已成為人們生活必需品,同時也改變著醫(yī)療保健產(chǎn)業(yè)的發(fā)展方向。移動醫(yī)療、智能醫(yī)療、遠(yuǎn)程醫(yī)療成為醫(yī)療領(lǐng)域發(fā)展的新熱點(diǎn)。
基于所級課題“家庭式健康監(jiān)護(hù)儀”,本文主要研究智能手機(jī)終端與家庭式健康監(jiān)護(hù)儀之間多種生理參數(shù)監(jiān)護(hù)數(shù)據(jù)的實(shí)時交互及展示。手機(jī)終端在接收到這些數(shù)據(jù)后,經(jīng)過報文解析處理,在界面上實(shí)時顯示健康監(jiān)護(hù)數(shù)據(jù)并進(jìn)行持久化存儲。然而,手機(jī)的處理性能有限,如何實(shí)現(xiàn)實(shí)時接收、處理并展示監(jiān)護(hù)數(shù)據(jù),是本課題研究的關(guān)鍵,也是本課題研究的重點(diǎn)與難點(diǎn)。
通過研究發(fā)現(xiàn),目前市場上結(jié)合Android平臺及便攜監(jiān)護(hù)儀的移動家庭式監(jiān)護(hù)產(chǎn)品尚處于起步階段[1],僅有國內(nèi)邁瑞已研制出一款名為邁瑞UBICARE(優(yōu)必康)H900的生理參數(shù)監(jiān)測儀/健康一體機(jī)。該設(shè)備具備基本的家用監(jiān)護(hù)功能,但還處于初期研發(fā)階段,存在不足。
因降低成本,監(jiān)護(hù)儀測量數(shù)據(jù)過于簡略,如心電數(shù)據(jù)標(biāo)明三導(dǎo)聯(lián)波形,實(shí)際只有II導(dǎo)聯(lián)一道波形;無呼吸波(RESP)、血氧描記波(PLEH)的檢測功能;僅可將單次測量的一導(dǎo)聯(lián)10 s心電波形上傳至手機(jī)端作為歷史波形靜態(tài)展示與查看;不支持測量數(shù)據(jù)的實(shí)時交互傳輸。
總而言之,該款設(shè)備定位于家用,而且配套的手機(jī)端應(yīng)用功能也很弱,只能作為記錄單次測量結(jié)果的工具。
在課題研究中,自己研制了家庭式便攜型監(jiān)護(hù)設(shè)備,該設(shè)備集成電源管理模塊和藍(lán)牙4.0模塊。通過最新的低功耗藍(lán)牙4.0協(xié)議,監(jiān)護(hù)設(shè)備與手機(jī)終端可實(shí)時交互監(jiān)護(hù)數(shù)據(jù)、控制命令以及告警信息。設(shè)備設(shè)計(jì)如圖1所示。
圖1 家庭式監(jiān)護(hù)儀與Android手機(jī)交互
大多數(shù)智能手機(jī)的處理資源和存儲資源相對于PC機(jī)器是相當(dāng)有限的,而醫(yī)療板卡對外傳輸?shù)某掷m(xù)性監(jiān)護(hù)數(shù)據(jù)量很大,本文所采用的醫(yī)療板卡發(fā)送各主要數(shù)據(jù)包的頻率,如表1所示。
表1醫(yī)療板卡數(shù)據(jù)發(fā)送頻率
表1所示,僅心電波形數(shù)據(jù),每秒鐘就會向外發(fā)出250個數(shù)值點(diǎn),即使在非實(shí)際監(jiān)護(hù)狀態(tài)下,醫(yī)療板卡也會通過藍(lán)牙向手機(jī)發(fā)送數(shù)據(jù),只是此時的數(shù)據(jù)相當(dāng)于當(dāng)前心電測量參數(shù)的零值。
本文研究的移動監(jiān)護(hù)APP軟件,主要包括以下模塊。
人機(jī)交互處理模塊:負(fù)責(zé)實(shí)時處理并動態(tài)描繪接收的監(jiān)護(hù)波形數(shù)據(jù)以及其他數(shù)值型健康數(shù)據(jù),提供友好的人機(jī)界面,接收界面操作指令并向用戶反饋處理結(jié)果信息。
健康數(shù)據(jù)接收處理模塊:本模塊通過手機(jī)端的藍(lán)牙4.0協(xié)議接口,與監(jiān)護(hù)設(shè)備建立數(shù)據(jù)連接,交互指令數(shù)據(jù)以及監(jiān)護(hù)數(shù)據(jù),并進(jìn)行報文的解析與封裝。
數(shù)據(jù)存儲訪問處理模塊:該模塊基于Android的Sqlite數(shù)據(jù)庫,為其他模塊提供監(jiān)護(hù)數(shù)據(jù)增刪改查的持久化操作接口。
數(shù)據(jù)通信模塊:此模塊提供對外網(wǎng)絡(luò)交互接口,彌補(bǔ)健康監(jiān)護(hù)儀的傳輸能力不足通過移動互聯(lián)網(wǎng)與外部健康系統(tǒng)平臺進(jìn)行監(jiān)護(hù)數(shù)據(jù)、個人信息等信息的交互。
其中,人機(jī)交互處理以及健康數(shù)據(jù)接收處理,是應(yīng)用的核心部分,也是影響整個應(yīng)用性能以及魯棒性的關(guān)鍵,因而,這兩個模塊是本文著重研究與討論的重點(diǎn)。
針對上節(jié)實(shí)際需求,本文借助Android SurfaceView雙緩沖機(jī)制[2],采用多線程結(jié)合阻塞隊(duì)列的生產(chǎn)者消費(fèi)者模式,很好解決了人機(jī)交互以及實(shí)時健康數(shù)據(jù)的并發(fā)處理問題。
數(shù)據(jù)交互過程中,因設(shè)計(jì)或網(wǎng)絡(luò)影響,數(shù)據(jù)發(fā)送速率與接收速率并不總是能夠保證一致的。尤其當(dāng)發(fā)送速率高于接收速率時,可能會出現(xiàn)數(shù)據(jù)丟失的情況。
3.1雙緩沖機(jī)制
Android提供了兩種基本畫圖對象:View和SurfaceView組件。View與SurfaceView在動態(tài)作圖差異上的對比如下[3]:
View沒有雙緩沖機(jī)制,難于保存之前繪制的內(nèi)容;當(dāng) View組件上圖形狀態(tài)數(shù)據(jù)發(fā)生變化,需要更新View組件上的圖像時,必須重繪整個View組件,如果數(shù)據(jù)量大,耗時較長;View的繪圖必須在當(dāng)前的UI線程中進(jìn)行,在更新View組件時需要借助使用Android Handler機(jī)制來處理。因而,在繪制數(shù)據(jù)量大情況下,使用View很可能會阻塞UI線程,導(dǎo)致手機(jī)應(yīng)用出現(xiàn)操作卡頓。
對比后可知,View組件適合于圖形數(shù)據(jù)量小,狀態(tài)數(shù)據(jù)變化較少,無需記錄上次數(shù)據(jù)的整體視圖繪制情形,但不適合實(shí)時動態(tài)畫圖及頻繁局部圖形更新的使用場景。
相比較 View組件,SurfaceView啟動新的線程,采用SurfaceHolder更新SurfaceView的組件繪制,而且通過獲取SurfaceView上指定區(qū)域的Canvas,只對指定的圖像區(qū)域部分進(jìn)行數(shù)據(jù)更新,降低了性能消耗,提高了畫面的更新速度,因而動態(tài)效果比自定義的View組件更加出色。
3.2雙緩沖與多線程
在使用SurfaceView繪制波形時,由于SurfaceView是通過鎖定Canvas的方式來畫圖,因此需要耗費(fèi)時間,不能保證動態(tài)畫圖的流暢,特別是在數(shù)據(jù)量大的情況下,這種問題尤其明顯。解決方法是采用多線程的方式,通過建立單獨(dú)的子線程,在子線程中使用SurfaceView來繪制波形。
當(dāng)手機(jī)端計(jì)算處理過于頻繁時,會嚴(yán)重消耗處理資源,降低手機(jī)應(yīng)用的用戶體驗(yàn)。在實(shí)際過程中,為了保證動態(tài)實(shí)時效果且又能夠減少手機(jī)CPU處理負(fù)擔(dān),本文在繪制動態(tài)波形數(shù)據(jù)時對數(shù)據(jù)進(jìn)行了分段處理。如對于心電波形數(shù)據(jù),每秒產(chǎn)生250個點(diǎn),即4 ms產(chǎn)生一個點(diǎn),而人動態(tài)視覺效果刷屏為60 Hz,大約16 ms刷新一次,則感受不到停頓,那么在實(shí)際處理中可以每次描繪4~5個波形數(shù)據(jù)點(diǎn)構(gòu)成的分段波形。
3.3多線程與阻塞隊(duì)列
一方面為了保證數(shù)據(jù)不會因?yàn)榘l(fā)送與處理速率的不同而丟失,另一方面為了使得數(shù)據(jù)接收順序與處理順序、展示順序始終保持一致,因而,本文利用基于阻塞隊(duì)列的生產(chǎn)者消費(fèi)者模式,使用多線程來完成數(shù)據(jù)的接收、分發(fā)與處理。數(shù)據(jù)接收線程在接收到新的數(shù)據(jù)報文后,作為生產(chǎn)者將報文放入第一級的阻塞隊(duì)列中,數(shù)據(jù)處理線程作為報文的消費(fèi)者,從隊(duì)列中獲取報文并進(jìn)行解析,同時數(shù)據(jù)處理線程作為下一級的生產(chǎn)者將解析后的報文分發(fā)到不同的阻塞隊(duì)列中。
本設(shè)計(jì)中對于波形數(shù)據(jù)展示方式,參照傳統(tǒng)監(jiān)護(hù)儀器設(shè)備上的心電波、呼吸波以及血氧描記波的動態(tài)描繪效果,以小段重繪的方式動態(tài)展示,處理方式如下:
(1)采用FIFO機(jī)制,逐步擦除動態(tài)展示波形數(shù)據(jù)中最早的小段波形數(shù)據(jù),并加入本次最新的小段波形數(shù)據(jù),以達(dá)到與監(jiān)護(hù)儀上的波形顯示相同的效果。
(2)針對繪圖數(shù)據(jù)量大的特點(diǎn),應(yīng)用接收線程在累計(jì)接收處理5個波形數(shù)據(jù)點(diǎn)后,交由繪圖線程一次性繪制5個點(diǎn)的小段波形,逐段覆蓋更新。
(3)控制canvas,避免圖像局部變化過于頻繁。
以心電II導(dǎo)聯(lián)波形為例,基于本文的技術(shù)研究,最終在手機(jī)上實(shí)現(xiàn)了預(yù)期的處理及繪制效果,并可以流暢地切換顯示測量的7導(dǎo)聯(lián)心電波形(ECG)、呼吸波形(RESP)以及血氧波形(PLETH)等波形數(shù)據(jù)。
本設(shè)計(jì)中的手機(jī)監(jiān)護(hù)應(yīng)用App完整實(shí)現(xiàn)效果圖,如圖2所示。
圖2監(jiān)護(hù)應(yīng)用App效果圖
本文采用自定義的雙緩沖機(jī)制SurfaceView控件進(jìn)行動態(tài)監(jiān)護(hù)波形描繪,相比于View控件,在動態(tài)波形圖繪制上性能更加優(yōu)越,并且大大降低了處理資源需求。同時,利用多線程和阻塞隊(duì)列技術(shù),很好的解決了實(shí)際應(yīng)用中監(jiān)護(hù)數(shù)據(jù)量過大以及傳輸處理速率不對等的問題,從而實(shí)現(xiàn)利用手機(jī)上有限的計(jì)算資源實(shí)時接收、處理并動態(tài)展示監(jiān)護(hù)的各項(xiàng)生理參數(shù)數(shù)據(jù),并且在已接入健康數(shù)據(jù)平臺的情況下,可以支持將接收處理的監(jiān)護(hù)數(shù)據(jù)通過移動互聯(lián)網(wǎng)實(shí)時上傳至健康數(shù)據(jù)平臺。
主要參考文獻(xiàn)
[1]柴繼紅,楊宏麗.基于藍(lán)牙4.0BLE的移動心電監(jiān)測系統(tǒng)[J].深圳職業(yè)技術(shù)學(xué)院學(xué)報,2014(5):16-20.
[2]藍(lán)坤,張躍.Android在遠(yuǎn)程醫(yī)療信息系統(tǒng)中的應(yīng)用[J].計(jì)算機(jī)應(yīng)用,2013,33(6):1790-1792.
[3]李剛.瘋狂Android講義[M].北京:電子工業(yè)出版社,2013:393.
10.3969/j.issn.1673-0194.2016.11.108
TN919.8
A
1673-0194(2016)11-0181-03
2016-03-21