本站小編為你精心準備了移動平臺大數據分批加載研究參考范文,愿這些范文能點燃您思維的火花,激發您的寫作靈感。歡迎深入閱讀并收藏。
《電腦編程技巧與維護雜志》2015年第六期
1涉及技術
(1)Handle-Message機制:即標準線程機制是采用創建線程方式處理異步問題,子線程與主線程通信采用消息機制實現。這種方式的優點是結構清晰、功能定義明確。在多線程合并操作對UI進行更新時更容易。Handle-Message機制主要由Handler-Message和Thread組成。Handler-Message由消息類Message、消息處理類Handler、消息隊列類MessageQueue和隊列線環Looper4部分組成,主要進行消息的發送和接收操作。其中消息類Message主要負責線程間通信的信息,如果處理完成后需要更新主線程界面,可以發送帶有結果數據的Message給主線程;Handler:消息處理類,負責管理Message的發送和處理。使用Handler類中的obtainMessage方法獲取子線程的Message,在sendMessage方法發送給UI線程進入消息隊列MessageQueue。Message-Queue:消息隊列,按照先進先出的執行順序存放Message。Looper:線環,負責管理消息隊列,功能是像流水線一樣從消息隊列中抽取消息,然后進行執行。Thread線程類,包含UI線程即主線程MainThread和WorkerThread子線程。其中WorkerThread主要負責處理耗時操作。主要過程如圖1所示[1]。(2)Listview控件:是在移動平臺上界面布局的數據顯示容器[2]。ListView分批數據加載實現方法:調用ListView的se-tOnScrollListener方法對ListView滾動事件進行監聽,主要監聽onScrollStateChanged跟onScroll方法,其中onScrollState-Changed方法是ListView滾動狀態變化執行的,分別會在用戶開始拖動、用戶拖動結束、拖動結束后由于慣性進行滾動這3種情況下調用,而onScroll方法是ListView每滾動一條記錄就會執行一次。在onScroll方法內判斷數據是否已經顯示到當前結果集的最后一條記錄,若是就使用異步機制繼續到服務器加載列表數據,并把獲得的數據加入結果集,最后在UI線程進行更新。(3)基本適配器BaseAdapter:是Android應用程序中常用到的基礎數據適配器[3],它的主要用途是將一組數據傳到像ListView、Spinner、Gallery及GridView等UI顯示組件。例如可以自定義的BaseAdapter展示ListView;可以動態修改、刷新ListView內容;可以實現ListView內容的點擊和長按點擊事件;可以在getView方法中動態增加新組件。BaseAdapter繼承接口類Adapter類,而Adapter、數據和ListView之間的關系如圖2所示[4]。(4)JSON解析:從數據庫中獲取數據主要采用Android的JSON進行解析[4],包含的類有:JSONObject:是一個JSON對象,這是系統中有關JSON定義的基本單元。JSONArray:代表一組有序的數值。本模型主要采用JSON解析從服務器獲取的數據信息。
2具體方案
具體方案步驟如下:(1)用戶發出閱讀請求。(2)Android客戶端UI線程創建一個子線程(workerthread)。(3)由該子線程通過HttpClient向服務器發送獲取健康報數據的請求,而不使用主線程執行操作,實現異步機制。(4)服務器接受到請求,調用service方法從數據庫獲取健康報數據,再對獲取到的數據進行迭代,逐一解析成JSON對象(JSONObject)加入到JSON數組(JSONArray),最后將JSON數組以字符串形式返回Android客戶端。(5)Android客戶端接受到返回的JSON數組,對數組進行迭代,逐一解析成健康報對象,加入List集合。(6)對主線程進行更新,主要通過handler對象的obtain-Message方法獲得一個消息Message,這個消息Message附帶的數據是解析后獲得List集合。再通過handler的sendMessage方法發送給UI線程。創建一個繼承BaseAdapter(基礎適配器)的HealthnewspaperAdapter類,將獲得子線程發來的健康報集合,綁定到HealthnewspaperAdapter對象中,最后顯示在ListView對象。(7)調用ListView的setOnScrollListener方法對ListView滾動事件進行監聽。如果發生ListView每滾動一條記錄就會執行一次onScroll方法,判斷數據是否已經顯示到當前結果集的最后一條記錄,若是就使用異步機制繼續重復步驟(1)向服務器請求加載數據,并把獲得的數據加入結果集,最后在UI線程進行更新,從而實現分批加載。整個流程如圖3所示。
3方案實施結果
目前老人手機的日益普及,針對老人健康管理應用設計也在日益完善。其中針對老人進行定期進行健康報傳送,讓老人能夠及時了解各種健康養生的辦法。健康報中數據量很多而且包含文字信息和圖片信息,其中健康報的列表就可以包含了上百條甚至上千條的內容(例如一個月的內容和一年的內容)。所以在進行數據傳送時采用異步機制的大數據分批傳送模式。開發環境包括:Android4.3版本,移動端的Eclipse開發平臺,服務器端采用的MyEclipse開發平臺和oracle數據庫。其中移動平臺為手機端,老年人通過手機進行閱讀手機報,而服務器端主要提供網頁Web瀏覽和后臺數據庫的管理,手機報的更新通過服務器端進行管理并實現網絡訪問瀏覽。手機健康報數據均保存在后臺數據庫中。健康報數據傳輸具體的順序圖如圖4所示。其過程即為描述的具體方案步驟,其中UIthread即為主線程,workerthread為子線程。這兩線程為Android端操作步驟。而Webaction和WebserviceWebDao為服務器端,作為對手機端的通信橋梁和數據庫的通信橋梁。一般老人手機屏幕一頁因為字體較大所以一般為6-7條記錄,而如果超過6-7條記錄時,沒必要全部進行傳輸顯示,可以采用傳輸模式進行數據分批顯示,如圖5(a)所示,這樣確保頁面上的6-7條記錄能夠傳輸保存在手機內存中。而所加載的列表信息內容包含文字和圖片,顯示內容如圖5(b)所示。采用服務器端對后臺數據庫中健康報信息進行更新,如圖6所示。
4結語
主要對移動平臺下大數據傳輸進行優化,主要采用Han-dle-Message異步機制的方式結合BaseAdapter、ListView控件對大數據分批加載,數據傳輸終端采用JSON技術對傳輸數據進行解析。設計一個老人健康管理平臺,包含移動平臺和Web服務器平臺兩部分,其中關于健康報的傳輸采用了傳輸方案通過分析和實現,通過運行,系統數據加載流程,健康報的圖文和文字信息加載正常而且流暢,手機端無卡殼死機現象出現,結果良好。后期對數據加載中涉及的緩存做進一步的優化。
作者:許雪林陳敏陳建峰單位:福建工程學院信息科學與工程學院