徐志揚,楊玉志,查曉俊,陳健,趙興群
1. 南京鼓樓醫(yī)院 臨床醫(yī)學工程處,江蘇 南京 210000;2. 東南大學 生物科學與醫(yī)學工程學院,江蘇 南京 210008
隨著醫(yī)療行業(yè)發(fā)展,醫(yī)療設(shè)備已經(jīng)成為醫(yī)院醫(yī)療、科研、教學必不可少的基礎(chǔ)和保障[1-3],對醫(yī)療設(shè)備的管理質(zhì)量直接影響醫(yī)院的經(jīng)濟效益。醫(yī)院設(shè)備管理部門工作主要集中在以下幾個方面:采購計劃擬定、調(diào)研招標、驗收培訓、維修保養(yǎng)、計量巡檢、盤點質(zhì)控、租用報廢[4-5],設(shè)備管理軟件也會根據(jù)這些工作內(nèi)容有針對性的設(shè)計相應模塊實現(xiàn)日常工作需求。
越來越多的設(shè)備管理軟件已從原先PC端移植到移動端,目的是能夠?qū)崿F(xiàn)便捷、實時[6]的查詢、登記等工作。目前移動端必須接入無線網(wǎng)絡(luò)或4G網(wǎng)絡(luò)才能實現(xiàn)與設(shè)備管理系統(tǒng)的后臺服務(wù)器相連,而目前多數(shù)醫(yī)院不能實現(xiàn)每個角落都能覆蓋無線網(wǎng)絡(luò),為了能真正實現(xiàn)全方位、隨時隨地的便捷操作體驗,附帶緩存功能的存儲方式可以提供一些解決思路。
SharedPreferences儲存技術(shù)是Android提供用來存儲簡單配置信息的一種機制[7],適用于存儲一些鍵值對[8]如用戶名、密碼員工信息等,不經(jīng)常改變且不作為查詢工作重點的數(shù)據(jù)緩存均可已使用。SharedPreferences實際上是一個接口如圖1所示。
完成存儲功能需實現(xiàn)接口中Editor、OnSharedPreferen cesChangedListener兩方法。存儲的信息以XML文件的形式保存在/data/data/PACKAGE_NAME/shared_prefs目錄下。實現(xiàn)服務(wù)器地址存儲關(guān)鍵代碼如下:
操作簡單但存儲效率低,多數(shù)用于用戶對軟件系統(tǒng)的設(shè)置存儲。
圖1 SharePreferences結(jié)構(gòu)圖
該存儲技術(shù)主要適用于下載圖片、音頻、資源包等數(shù)據(jù)量相對較大的文件。保存方式基本上有兩種選擇:一種是手機內(nèi)部儲存ROM[9],另一種是外部儲存(SD卡、TF卡等)。在使用時應注意,外部存儲對數(shù)據(jù)的保護較少,所以一些重要的沒有加密的數(shù)據(jù)不建議保存到外部存儲中,例如員工的基本信息等。File實際上是Android中的類,它是將JAVA中IO流包裝后的一種應用,IO流結(jié)構(gòu)圖如圖2所示。
圖2 IO流結(jié)構(gòu)圖
File類是對文件系統(tǒng)的中的文件以及文件夾進行對象的封裝。可以通過對象的思想來操作文件以及文件夾。在使用時需要import java.io.*包,使用ROM或SD卡進行數(shù)據(jù)存儲時需要在AndroidMainfset.xml文件中進行權(quán)限的配置:
該存儲方式,可以先將工作中常用的圖片、文件數(shù)據(jù)離線緩存在手機中,如醫(yī)療設(shè)備的SOP,使用手冊、常見故障說明,即使在沒有網(wǎng)絡(luò)的角落里工程師也能查看設(shè)備的相關(guān)信息。
SQLite是一個嵌入式SQL數(shù)據(jù)庫引擎。與大多數(shù)其他SQL數(shù)據(jù)庫不同,SQLite沒有單獨的服務(wù)器進程。SQLite直接讀寫普通磁盤文件,它遵守ACID的關(guān)聯(lián)式數(shù)據(jù)庫管理,即使在網(wǎng)絡(luò)、電力、系統(tǒng)崩潰時也會實現(xiàn)其原子性(Atomic)、一致性(Consistent)、隔離性(Isolated)和持久性(Durable)的可序列化事務(wù)[10]。占用空間極小,在嵌入式設(shè)備中應用廣泛。SQLite具有以下幾種常用的數(shù)據(jù)類型。
NULL:這個值為空值。
TEXT:值為文本字符串,使用數(shù)據(jù)庫編碼存儲,方式:TUTF-8,UTF-16BE、UTF-16-LE)。
VARCHAR(n):長度不固定且其最大長度為n的字串,n不能超過4000。
CHAR(n):長度固定為n的字串,n不能超過254。
INTEGER:值被標識為整數(shù),依據(jù)值的大小可以依次被存儲為 1,2,3,4,5,6,7,8。
REAL:所有值都是浮動的數(shù)值,被存儲為8字節(jié)的IEEE浮動標記序號。
BLOB:值是BLOB數(shù)據(jù)塊,以輸入的數(shù)據(jù)格式進行存儲,與輸入數(shù)據(jù)完全相同,不改變格式。
DATA:包含了年份、月份、日期。
TIME:包含了小時、分鐘、秒。
為了方便使用SQLite數(shù)據(jù)庫可以借助一些第三方基于Android數(shù)據(jù)庫框架如LitePal,Litepal是一款開源的數(shù)據(jù)庫框架,采用對象關(guān)系映射(ORM)模式,將SQLite數(shù)據(jù)庫功能進行封裝,可以不用寫一行SQL語句就可以完成創(chuàng)建表、增刪改查的操作[11]。并且很輕量級,jar包不到100 K,幾乎零配置。在具體使用Litepal前需在項目的assets目錄下面新建一個litepal.xml文件:
</litepal>用于聲明數(shù)據(jù)庫名稱和版本號。在新建的數(shù)據(jù)庫類中完成數(shù)據(jù)類型配置后,就可以使用java語言進行數(shù)據(jù)庫操作,關(guān)鍵代碼如下:
可以看出這類數(shù)據(jù)庫離線緩存非常適合管理軟件主要信息的存儲,設(shè)備信息其實就是一張張關(guān)系型數(shù)據(jù)網(wǎng)絡(luò),設(shè)備名稱、編碼、品牌、型號、使用科室、購置價格、開機時間、故障次數(shù)等等都可以以一定的數(shù)據(jù)類型緩存在內(nèi)存中占用空間很小的SQLite數(shù)據(jù)庫內(nèi)。包括一些文字型工作記錄在沒有網(wǎng)絡(luò)時也可以離線保存至數(shù)據(jù)庫,待系統(tǒng)聯(lián)網(wǎng)后上傳到網(wǎng)絡(luò)服務(wù)器或云端,操作者不需要擔心自身工作記錄是否受到環(huán)境網(wǎng)絡(luò)的影響。
緩存與持久儲存區(qū)別在于緩存文件并不能保證持久。與PC端相似,網(wǎng)絡(luò)緩存儲存在RAM中,內(nèi)存低的時候,Android系統(tǒng)會優(yōu)先刪除這些緩存文件,而持久存儲的文件在卸載應用時才被刪除的。所以網(wǎng)絡(luò)緩存適用于在同一時間段內(nèi)多次訪問相同網(wǎng)絡(luò)信息,信息內(nèi)容數(shù)據(jù)量不大,無需實時監(jiān)聽的情況。Google推出的網(wǎng)絡(luò)通信框架Volley,特別適合處理數(shù)據(jù)量小的網(wǎng)絡(luò)操作,Volley內(nèi)部實現(xiàn)流程如圖3所示[12-13]。
圖3 Volley內(nèi)部流程圖
Volley優(yōu)點是內(nèi)部封裝了異步線程,可直接在主線程請求網(wǎng)絡(luò),Volley會檢查這個請求是否可以從緩存中得到,如果可以,緩存將負責讀取,解析,和分發(fā)。如果沒有緩存,則創(chuàng)建網(wǎng)絡(luò)請求[14](RequestQueue)將請求傳遞給網(wǎng)絡(luò)線程,處理返回的結(jié)果,在創(chuàng)建網(wǎng)絡(luò)請求的同時也會創(chuàng)建一個DiskBasedCache對象,該對象自動將網(wǎng)絡(luò)響應同步進行緩存,軟件中內(nèi)置的CacheDir目錄下的volley文件夾就是DiskBasedCache硬盤緩存目錄。Volley緩存的數(shù)據(jù)其實包括字符串數(shù)據(jù)、json數(shù)據(jù)、圖片。管理軟件得到緩存數(shù)據(jù)方法也比較方便:
在實際軟件運行時遇上前一秒有網(wǎng)絡(luò)信號,后一秒就沒有時,用戶請求同一數(shù)據(jù)就不會出現(xiàn)請求失敗的情況,很大程度的保證了用戶使用的流暢性。
不同的數(shù)據(jù)存儲方式都有各自的優(yōu)缺點,不同特點的數(shù)據(jù)應該用不同的數(shù)據(jù)存儲方式,以滿足軟件設(shè)計的最優(yōu)化。分析管理軟件所涉及的數(shù)據(jù)類型總結(jié)成如圖4所示。
圖4 數(shù)據(jù)類型關(guān)系表
在處理這些數(shù)據(jù)時根據(jù)數(shù)據(jù)在實際應用中的特點選擇合適存儲方式,遵循幾點原則:① 影響用戶實時操作體驗的數(shù)據(jù)盡量能實現(xiàn)離線讀寫;② 體積較小的鍵值對且不常改變的數(shù)據(jù)用SharedPreferences;③ 格式為圖片、文檔等體積較大的閱讀類數(shù)據(jù)根據(jù)用戶需求使用 files功能下載至本地,不需要下載時使用Web Cache緩存在內(nèi)存中;④ 關(guān)聯(lián)信息、鍵值對較多的數(shù)據(jù)用SQLite存??;⑤ 臨時狀態(tài)、編號等數(shù)據(jù)用可被自動清除的Web Cache技術(shù)。數(shù)據(jù)存取應用框架如圖5。
實際測Web Cache功能,網(wǎng)絡(luò)斷開時使用Toast提示用戶斷網(wǎng)狀態(tài),但數(shù)據(jù)顯示正常如圖6。
實際耗時對比如圖7所示,軟件需要在斷網(wǎng)后持續(xù)請求8 s左右時間,展示緩存內(nèi)數(shù)據(jù),8 s主要是網(wǎng)絡(luò)等待,實際從緩存中讀取數(shù)據(jù)并進行展示,僅需271 ms,幾乎可忽略不計。
圖5 數(shù)據(jù)存取框架圖
圖6 正常聯(lián)網(wǎng)與斷網(wǎng)數(shù)據(jù)獲取后展示界面
圖7 正常聯(lián)網(wǎng)和斷網(wǎng)后數(shù)據(jù)展示耗時
隨著高速4G移動網(wǎng)絡(luò)信號的全面覆蓋及醫(yī)院信息化建設(shè)的穩(wěn)步發(fā)展,醫(yī)院無線網(wǎng)絡(luò)也迎來了新時代,但是醫(yī)院結(jié)構(gòu)復雜,很多功能科室如放射科、手術(shù)室、層流病房等如果不添加移動信號增強設(shè)備就會出現(xiàn)斷網(wǎng)現(xiàn)象,更何況有些設(shè)備管理軟件專用網(wǎng)絡(luò)還沒有能全面覆蓋。無論哪種網(wǎng)絡(luò)框架模式想要配合掃碼技術(shù)[15-16]實現(xiàn)實時、便捷的操作體驗,就必須要求管理軟件在離線時對數(shù)據(jù)有一定的處理能力。結(jié)合幾種基于Android數(shù)據(jù)讀存儲方法,能夠有效地提高軟件的使用率,從而發(fā)揮管理軟件對設(shè)備的全生命周期進行了實時監(jiān)控的功能,提高醫(yī)院醫(yī)療設(shè)備的管理水平。