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