袁世龍 李旭芳 嚴(yán)天立
摘 要 近年來(lái),隨著互聯(lián)網(wǎng)技術(shù)與移動(dòng)端技術(shù)的高速發(fā)展,Android因?yàn)槠湓谝苿?dòng)端上擁有格外的優(yōu)勢(shì),更有利于構(gòu)建“互聯(lián)網(wǎng)+”的問(wèn)題解決方案。利用Android平臺(tái)開(kāi)發(fā)“互聯(lián)網(wǎng)+選座”的選座解決方案,可以?xún)?yōu)化或解決高校對(duì)于自習(xí)、考研學(xué)習(xí)、課程答疑,向?qū)W生分配座位,管理座位等問(wèn)題。該系統(tǒng)采用Android(Java)客戶(hù)端 + Java套接字服務(wù)器 + I/O文件數(shù)據(jù)存儲(chǔ) + Java 套接字管理客戶(hù)端,構(gòu)成系統(tǒng)。旨在快速實(shí)現(xiàn)平臺(tái)搭建,并滿(mǎn)足相關(guān)管理需求。
關(guān)鍵詞 Android Java Socket 高校選座 選座App
中圖分類(lèi)號(hào):TP311文獻(xiàn)標(biāo)識(shí)碼:A
1背景
當(dāng)前,在各大高校,為達(dá)到各種目的而分配的座位已成為一種重要的教育資源。雖然座位作為基本單位,但是承載的功能多種多樣,可能是考研學(xué)生的自習(xí)座位,可能是一般學(xué)生的自習(xí)座位,也有可能是老師進(jìn)行答疑的答疑座位等。因?yàn)槎喾N多樣的功能目的,同時(shí)教室的分配又具有較高的靈活性,在空間與時(shí)間上都會(huì)發(fā)生變化,所以相關(guān)座位的管理就成為了一大問(wèn)題。然而,隨著互聯(lián)網(wǎng)技術(shù)的高速發(fā)展,高校對(duì)于自習(xí)教室的管理,可以借助互聯(lián)網(wǎng)技術(shù)進(jìn)行優(yōu)化與解決。同時(shí)在教室選座這一問(wèn)題上,用戶(hù)靈活性高且管理對(duì)象變更速度快,因此Android移動(dòng)端平臺(tái)搭建可以說(shuō)是最適合用于解決此類(lèi)問(wèn)題。
2需求分析
2.1功能需求
基于系統(tǒng)要實(shí)現(xiàn)的最終目標(biāo),我們整理得到以下幾種基本功能需求:(1)能夠區(qū)分、標(biāo)識(shí)用戶(hù)所在學(xué)校,并且能夠?qū)τ脩?hù)個(gè)體進(jìn)行通知與識(shí)別;(2)能夠從系統(tǒng)中獲取座位實(shí)時(shí)信息,并通過(guò)Android端的app進(jìn)行展示;(3)能夠?qū)淌易慌c相關(guān)資源提供足夠的信息來(lái)幫助用戶(hù)參考、選座;(4)能夠?qū)⒔淌一蜃坏耐ㄖ?、變更信息即時(shí)發(fā)送給用戶(hù),避免造成管理上的問(wèn)題。(5)用戶(hù)能通過(guò)一定的排序,來(lái)對(duì)可選教室進(jìn)行過(guò)濾篩選,并且可以通過(guò)搜索、收藏與查看選座記錄的方式對(duì)特定教室加以區(qū)別和搜索,方便再次選座和指定目標(biāo)的選座。(6)能夠按照學(xué)校的相關(guān)規(guī)定對(duì)系統(tǒng)用戶(hù)的行為進(jìn)行一定的約束或監(jiān)督,以便管理。
2.2用戶(hù)群體
我們把用戶(hù)群體進(jìn)行一定的分類(lèi):
(1)一般用戶(hù):
①學(xué)生:進(jìn)行選座與被管理的用戶(hù)對(duì)象。
②答疑老師:通過(guò)發(fā)送消息來(lái)通知學(xué)生用戶(hù)前往對(duì)應(yīng)教室進(jìn)行答疑的用戶(hù)對(duì)象。
(2)管理用戶(hù):
①教室管理人員:可以前往教室、對(duì)教室內(nèi)的資源進(jìn)行維護(hù)并對(duì)違規(guī)行為進(jìn)行管理的用戶(hù)對(duì)象。②系統(tǒng)管理人員:對(duì)系統(tǒng)的Android端、服務(wù)器端和管理客戶(hù)端進(jìn)行軟件維護(hù)與數(shù)據(jù)維護(hù)的用戶(hù)對(duì)象。
2.3性能需求分析
(1)突發(fā)性高并發(fā):用戶(hù)對(duì)于系統(tǒng)的訪問(wèn)多為周期性的高并發(fā)訪問(wèn),而在多數(shù)期間屬于靜息期。高并發(fā)周期取決于校園的晚自習(xí)安排、下課后學(xué)生自習(xí)安排、節(jié)假日自習(xí)安排、老師答疑安排等等。并發(fā)峰值基于學(xué)校的人數(shù)決定,經(jīng)調(diào)研系統(tǒng)最少需要支持500-700人的峰值并發(fā)使用。
(2)個(gè)體用戶(hù)持續(xù)的TCP請(qǐng)求:用戶(hù)App在線時(shí)為了能夠及時(shí)刷新用戶(hù)界面內(nèi)容,定時(shí)會(huì)向服務(wù)器請(qǐng)求獲取班級(jí)信息。因此,當(dāng)人在線人數(shù)增加時(shí),TCP并發(fā)量會(huì)成倍增加。這需要服務(wù)器對(duì)于高并發(fā)訪問(wèn)有著更高的性能。
3系統(tǒng)結(jié)構(gòu)與系統(tǒng)設(shè)計(jì)
安卓客戶(hù)端與Java服務(wù)端互相通過(guò)基于TCP/IP協(xié)議的Socket通訊,獲取Android客戶(hù)端所需的相關(guān)信息、用戶(hù)信息與管理信息、用戶(hù)端上傳的密碼修改、手機(jī)綁定與選組等操作信息。Socket通訊的內(nèi)容采用JSON格式進(jìn)行交付。客戶(hù)端與服務(wù)端之間通過(guò)“對(duì)象->JSON文本->對(duì)象”的模式進(jìn)行信息傳遞。
Android客戶(hù)端搭載了SQLite數(shù)據(jù)庫(kù)對(duì)相關(guān)數(shù)據(jù)進(jìn)行存儲(chǔ)。Java服務(wù)端采用Java語(yǔ)言原生的文本I/O流對(duì)數(shù)據(jù)進(jìn)行讀取、存儲(chǔ)。客戶(hù)端負(fù)責(zé)將得到的信息展現(xiàn)在用戶(hù)面前,給用戶(hù)提供選座的參考信息與通知等功能。Java服務(wù)端提供數(shù)據(jù)的匯總、處理與反饋等功能。Java管理客戶(hù)端則負(fù)責(zé)管理用戶(hù)中系統(tǒng)管理人員與教室管理人員對(duì)教室相關(guān)信息的變更、違規(guī)懲罰以及信息通知等內(nèi)容發(fā)送給服務(wù)器,用于更新教室信息。
4系統(tǒng)實(shí)現(xiàn)
4.1客戶(hù)端界面設(shè)計(jì)
Android客戶(hù)端基于Androidx,API 21(Android5.0),OpenJDK8開(kāi)發(fā),開(kāi)發(fā)環(huán)境Android Studio3.5.3??蛻?hù)端內(nèi)的數(shù)據(jù)為SQLite(Room庫(kù)支持)??蛻?hù)端大致結(jié)構(gòu)與控件使用:
4.2 SQLite數(shù)據(jù)庫(kù)設(shè)計(jì)
客戶(hù)端內(nèi)采用的Room數(shù)據(jù)庫(kù)抽象來(lái)對(duì)數(shù)據(jù)庫(kù)進(jìn)行管理維護(hù),并將數(shù)據(jù)交互的過(guò)程放置在其他線程來(lái)避免對(duì)主線程造成卡頓,從而影響用戶(hù)體驗(yàn)。
4.2.1 Dao接口設(shè)計(jì)
定義interface注以注釋@Dao將該接口定義為Dao,以實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)的操作封裝,使得Java對(duì)象能夠抽象為特定表中的元組得以存儲(chǔ)。對(duì)Dao接口內(nèi)的抽象函數(shù)進(jìn)行注釋以聲明數(shù)據(jù)庫(kù)操作。@Insert注釋方法為插入對(duì)象到表中。@Update注釋方法為以主鍵檢索表,更新對(duì)象到表中。@Delete注釋方法為以主鍵檢索表,將傳入方法的對(duì)象在表中找到并刪除。@Query()注釋可以寫(xiě)入?yún)?shù),參數(shù)為SQL語(yǔ)句,對(duì)表進(jìn)行特定的操作,并且注釋了該注釋的函數(shù)帶有返回值作為結(jié)果。客戶(hù)端中主要采用“@Query”獲取全表對(duì)象。
4.2.2 Entity 存儲(chǔ)類(lèi)設(shè)計(jì)
能夠被Dao操作的Java對(duì)象是注以@Entiy的類(lèi),該類(lèi)決定了數(shù)據(jù)庫(kù)中表的設(shè)計(jì)。類(lèi)中變量決定表中的屬性名。注以@PrimaryKey(autoGenerate = true)的變量為主鍵,參數(shù)決定其為自動(dòng)生成主鍵值,注以@ColumnInfo(name = "Column_name")的變量為設(shè)置該變量在數(shù)據(jù)庫(kù)表中的屬性名,而該屬性的存儲(chǔ)方式將與該變量的Java類(lèi)型相同。
4.2.3 DataBase類(lèi)設(shè)計(jì)
將類(lèi)注釋以@Database聲明為DataBase類(lèi),其封裝了數(shù)據(jù)庫(kù)連接,作為一個(gè)對(duì)象方便訪問(wèn)。設(shè)計(jì)時(shí)對(duì)該類(lèi)采用了單例模式,以避免反復(fù)創(chuàng)建數(shù)據(jù)庫(kù)連接對(duì)象而產(chǎn)生的系統(tǒng)損耗或內(nèi)存泄露。
4.3服務(wù)端設(shè)計(jì)
服務(wù)端使用Java原生的I/O文本流與TCP Socket技術(shù)搭建。通過(guò)TCP連接輪詢(xún)實(shí)現(xiàn)等待TCP連接并響應(yīng)。
5系統(tǒng)測(cè)試
5.1功能測(cè)試
(1)用戶(hù)自動(dòng)創(chuàng)建測(cè)試。用戶(hù)首次登錄App直接創(chuàng)建默認(rèn)賬號(hào)來(lái)進(jìn)行登錄驗(yàn)證。
(2)頁(yè)面跳轉(zhuǎn)測(cè)試。App端界面跳轉(zhuǎn)應(yīng)該流暢、正確。各個(gè)界面是否有提供返回到上一界面的按鍵。檢測(cè)是否存在界面丟失而引發(fā)的空指針異常。
(3)檢查各個(gè)按鈕控件是否正常運(yùn)行,功能完整,能夠準(zhǔn)確向用戶(hù)表達(dá)其功能用途。
(4)檢測(cè)頁(yè)面數(shù)據(jù)是否正常,數(shù)據(jù)加載線程與UI線程通信是否正常。
(5)App端與服務(wù)器通信測(cè)試。
5.2性能測(cè)試用例設(shè)計(jì)
基于阿里云服務(wù)器,云服務(wù)監(jiān)控。以加快單客戶(hù)端TCP連接請(qǐng)求頻率模擬并發(fā)訪問(wèn)。著重對(duì)服務(wù)器與客戶(hù)端之間的網(wǎng)絡(luò)情況:如服務(wù)器平均入網(wǎng)帶寬、服務(wù)器平均出網(wǎng)帶寬、TCP連接并發(fā)峰值,的測(cè)試。同時(shí)測(cè)試服務(wù)器的CPU平均使用率。
經(jīng)過(guò)測(cè)試,服務(wù)器在峰值并發(fā)達(dá)到700次訪問(wèn)時(shí)運(yùn)行平穩(wěn)。在最高并發(fā)數(shù)下Java虛擬機(jī)堆內(nèi)存穩(wěn)定在10Mb左右。
5.3測(cè)試結(jié)論
系統(tǒng)測(cè)試各項(xiàng)指標(biāo)良好,對(duì)于突發(fā)性高并發(fā)訪問(wèn)有較好的抗壓能力。服務(wù)器內(nèi)存運(yùn)行情況持續(xù)、平穩(wěn)。CPU使用率較低,網(wǎng)絡(luò)帶寬要求低,服務(wù)器部署運(yùn)行良好,客戶(hù)端接收情況良好。
6結(jié)論
隨著互聯(lián)網(wǎng)浪潮的來(lái)襲,互聯(lián)網(wǎng)技術(shù)結(jié)合移動(dòng)端平臺(tái)給許多現(xiàn)實(shí)中的問(wèn)題帶來(lái)了新的解決思路。通過(guò)實(shí)驗(yàn),可以看到本論文設(shè)計(jì)的校園選座APP能夠充分利用功能性座位這種教學(xué)資源,改善傳統(tǒng)的座位管理方式。并且該系統(tǒng)也擁有較好的可擴(kuò)展性,可以擴(kuò)充入物聯(lián)網(wǎng)技術(shù),大數(shù)據(jù)技術(shù)等,讓選座的紀(jì)律管理與安排效果更好。但該系統(tǒng)也有一定的缺點(diǎn),比如Java服務(wù)端可以進(jìn)行優(yōu)化,部署專(zhuān)業(yè)的Web服務(wù)器而不是Socket服務(wù)器,并且可以使用數(shù)據(jù)庫(kù)存儲(chǔ)相關(guān)信息,而不是IO文件流存儲(chǔ)。不過(guò)當(dāng)前系統(tǒng)的數(shù)據(jù)關(guān)系性較低,并發(fā)量并不是非常大,所以采用IO文件流存儲(chǔ)會(huì)更加適合。
Android移動(dòng)端平臺(tái)發(fā)展至今,由于其開(kāi)源而擁有良好的生態(tài),用戶(hù)群體龐大,市場(chǎng)前景可觀。通過(guò)Android平臺(tái)解決各大高校對(duì)于座位教學(xué)資源的管理的各種問(wèn)題,是一個(gè)較為可觀的方案。這將使得用戶(hù)能夠高效的尋找合適的位置,管理者也能夠精準(zhǔn)的實(shí)施管理。
參考文獻(xiàn)
[1] 張紅霞.基于Java Socket的一個(gè)簡(jiǎn)單Web服務(wù)器實(shí)現(xiàn)[J].電腦知識(shí)與技術(shù),2015,11(18):52-53.
[2] 陽(yáng)暉.高校圖書(shū)館自習(xí)室管理存在的問(wèn)題與對(duì)策[J].辦公室業(yè)務(wù),2019(21):175-176.
[3] 王紅偉,吳坤芳.Android手機(jī)App程序中SQLite數(shù)據(jù)存儲(chǔ)應(yīng)用[J].漯河職業(yè)技術(shù)學(xué)院學(xué)報(bào),2018(05):30-32.
[4] 孫翠改.Android環(huán)境下主UI線程與子線程通信機(jī)制研究[J].數(shù)字技術(shù)與應(yīng)用,2016(09):66-67
[5] 陳天超.單例設(shè)計(jì)模式研究[J].福建電腦,2016,32(08):14-15+20.
[6] 歐陽(yáng)燊.Android Studio開(kāi)發(fā)實(shí)戰(zhàn) 從零基礎(chǔ)到App上線(第2版)[M].北京:清華大學(xué)出版社,2018.