湖北工業(yè)職業(yè)技術(shù)學(xué)院信息與智能工程系 莫足琴
JAVA移動(dòng)應(yīng)用程序開發(fā)對(duì)于PUSH技術(shù)的運(yùn)用分析
湖北工業(yè)職業(yè)技術(shù)學(xué)院信息與智能工程系 莫足琴
PULL方式是較為常用的一種應(yīng)用程序運(yùn)行方式,這種運(yùn)行方式需要用戶以手動(dòng)的形式來實(shí)現(xiàn)應(yīng)用程序的啟動(dòng),這也就說明PULL方式無法實(shí)現(xiàn)某些特定情況下程序啟動(dòng)的要求,此時(shí),合理的運(yùn)用PUSH方式實(shí)現(xiàn)程序的運(yùn)行也就非常必要了,PUSH方式可以實(shí)現(xiàn)JAVA移動(dòng)應(yīng)用程序的自動(dòng)啟動(dòng)運(yùn)行。本文主要研究了如何運(yùn)用PUSH方式在J2ME平臺(tái)下來自動(dòng)啟動(dòng)運(yùn)行JAVA移動(dòng)應(yīng)用程序,為了使讀者加深對(duì)PUSH技術(shù)的認(rèn)識(shí),本文首先介紹了該技術(shù),然后對(duì)PUSH注冊(cè)機(jī)制的實(shí)現(xiàn)過程進(jìn)行了詳細(xì)闡述,并實(shí)際開發(fā)了一個(gè)可以應(yīng)用到JAVA手機(jī)上的MIDlet應(yīng)用程序?qū)σ苿?dòng)應(yīng)用程序開發(fā)中采用PUSH注冊(cè)機(jī)制進(jìn)行了驗(yàn)證。
PUSH注冊(cè)機(jī)制;J2ME平臺(tái);JAVA移動(dòng)應(yīng)用程序
JAVA技術(shù)主要是由J2EE、J2SE以及J2ME三個(gè)主要版本構(gòu)成的,J2ME作為其主要的構(gòu)成部分之一是現(xiàn)階段較為常用的一種移動(dòng)領(lǐng)域開發(fā)平臺(tái)[1]。隨著電子信息技術(shù)的不斷發(fā)展,無線設(shè)備的類型多種多樣,各種無線設(shè)備之間存在較大的差異性,JAVA語言具有與平臺(tái)無關(guān)的優(yōu)良特性,而J2ME很好的繼承了JAVA語言的這一特性,并在此基礎(chǔ)上實(shí)現(xiàn)了將其應(yīng)用到小型電子設(shè)備中,J2ME可以支持各類移動(dòng)設(shè)備對(duì)應(yīng)用程序進(jìn)行無差異的共享[2]。Sun公司對(duì)J2ME開發(fā)平臺(tái)進(jìn)行了科學(xué)的定義,認(rèn)為該平臺(tái)是由簡表、配置以及Java Virtual Machine三個(gè)具體層面構(gòu)成,這種定義及設(shè)計(jì)方式可以很好的實(shí)現(xiàn)J2ME在具有差異性的各類設(shè)備上正常運(yùn)行。目前,MIDlet應(yīng)用程序中大多數(shù)都是采用PULL方式實(shí)現(xiàn)應(yīng)用程序的啟動(dòng)運(yùn)行,但實(shí)際工作生活中在某些特殊的情況下人們更希望MIDlet應(yīng)用程序可以實(shí)現(xiàn)自動(dòng)啟動(dòng),這種現(xiàn)象在那些大型的企業(yè)級(jí)移動(dòng)應(yīng)用程序中表現(xiàn)的更為明顯,這些企業(yè)級(jí)移動(dòng)應(yīng)用程序經(jīng)常進(jìn)行的一類工作就是將信息從服務(wù)器發(fā)送到移動(dòng)終端,然后運(yùn)用移動(dòng)終端上的應(yīng)用程序?qū)邮艿降男畔⑦M(jìn)行必要的處理,人們希望這一過程可以自動(dòng)進(jìn)行,為了滿足人們的這一需求,PUSH技術(shù)的應(yīng)用是非常必要的。
PUSH技術(shù)是一種新興技術(shù),這種技術(shù)基于C/S模式,可以很好的實(shí)現(xiàn)將服務(wù)器中的相關(guān)信息自主推送到各類移動(dòng)終端[3]。PUSH技術(shù)與傳統(tǒng)的PULL技術(shù)相比有著根本性的區(qū)別,其區(qū)別主要邊現(xiàn)在以下方面[4]:對(duì)與信息到達(dá)客戶機(jī)的方式上兩種技術(shù)存在本質(zhì)性區(qū)別,PULL技術(shù)在獲取信息前必須向服務(wù)器發(fā)出獲取信息的請(qǐng)求,而PUSH則無需進(jìn)行此步操作,該技術(shù)實(shí)現(xiàn)了服務(wù)器自主向客戶機(jī)發(fā)送相關(guān)信息,在信息推送的過程中服務(wù)器是一個(gè)具體PUSH事件的發(fā)起者,這樣做的最大優(yōu)勢(shì)就是可以使各類信息主動(dòng)地出現(xiàn)在移動(dòng)終端的客戶眼前,在信息發(fā)送方面更具時(shí)效性和主動(dòng)性,減少了用戶用于搜索各類信息的時(shí)間,同時(shí),還可以跟好的將各類增值業(yè)務(wù)推薦給用戶,這樣可以將WAP提供服務(wù)和移動(dòng)終端的用戶更好地聯(lián)系起來。
JAVA移動(dòng)應(yīng)用程序開發(fā)中應(yīng)用PUSH注冊(cè)機(jī)制可以自動(dòng)的啟動(dòng)應(yīng)用程序,PUSH注冊(cè)是大多AMS應(yīng)用管理軟件的一個(gè)非常重要的組件,是AMS應(yīng)用管理軟件的一個(gè)組成部分,PUSH注冊(cè)位于AMS應(yīng)用管理軟件的內(nèi)部。AMS應(yīng)用管理軟件的主要功能是實(shí)現(xiàn)MIDlet應(yīng)用程序的生命周期管理,包括MIDlet應(yīng)用程序的運(yùn)行、暫停以及銷毀等。
PUSH注冊(cè)在MIDP2.0中作為通用連接框架的一個(gè)類出現(xiàn),在這個(gè)類中定義了所有關(guān)于PUSH的方法,程序開發(fā)人員在實(shí)現(xiàn)程序開發(fā)時(shí)可以充分利用所提供的方法將具體的MIDlet應(yīng)用程序注冊(cè)到PUSH事件中[5],同時(shí),這一過程開發(fā)人員還可以獲取與PUSH相關(guān)的各種信息,可以對(duì)該P(yáng)USH事件能否激活MIDlet應(yīng)用程序進(jìn)行判斷。當(dāng)一個(gè)應(yīng)用程序處于運(yùn)行狀態(tài)時(shí),這個(gè)應(yīng)用程序便可對(duì)所有的與IO有關(guān)的連接進(jìn)行自動(dòng)處理,當(dāng)應(yīng)用程序未運(yùn)行時(shí),AMS應(yīng)用程序管理軟件便可以對(duì)一切請(qǐng)求入站連接進(jìn)行監(jiān)聽,一旦監(jiān)聽到有連接請(qǐng)求,AMS應(yīng)用程序管理軟件便會(huì)即刻調(diào)用相關(guān)方法將應(yīng)用程序啟動(dòng)。
MIDP2.0規(guī)范沒有嚴(yán)格的要求設(shè)備所支持的協(xié)議類型,但為了給PUSH注冊(cè)機(jī)制提供適宜的運(yùn)行環(huán)境,必須支持用于保證其能夠正常運(yùn)行的相關(guān)入站連接的協(xié)議。入站連接的協(xié)議的實(shí)現(xiàn)主要是通過設(shè)備制造商來完成的。滿足應(yīng)用程序接收PUSH信息的一個(gè)必要前提是該應(yīng)用程序已經(jīng)完成了向,那么此應(yīng)用程序就一定要向PushRegistry的注冊(cè)過程,現(xiàn)有的PUSH注冊(cè)方式有兩種,分別是靜態(tài)注冊(cè)和動(dòng)態(tài)注冊(cè)。
靜態(tài)注冊(cè)通過在描述符文件中對(duì)MIDlet-PUSH字段的信息進(jìn)行指定來完成注冊(cè)程序,具體的信息內(nèi)容應(yīng)包括連接類型以及連接發(fā)送者兩個(gè)方面,這一定義過程發(fā)生在安裝MIDlet套件之前,因此,這種注冊(cè)過程是一種靜態(tài)注冊(cè)。
動(dòng)態(tài)注冊(cè)發(fā)生在運(yùn)行PushRegistry應(yīng)用編程接口的過程中,實(shí)際注冊(cè)過程中應(yīng)用程序可視實(shí)際情況拒絕或者允許PUSH請(qǐng)求,某些情況下還可以通過修改注冊(cè)來滿足實(shí)際情況,因此,這種注冊(cè)方式是一種動(dòng)態(tài)注冊(cè)。
當(dāng)某個(gè)連接完成了PushRegistry內(nèi)部的注冊(cè)后,AMS應(yīng)用管理軟件便會(huì)對(duì)這個(gè)連接進(jìn)行持續(xù)地監(jiān)聽,當(dāng)AMS監(jiān)聽到消息時(shí)便會(huì)立刻將MIDlet應(yīng)用程序激活,通常情況下存在兩種激活方式。一種是內(nèi)部時(shí)鐘激活方式,另一種是入站連接激活方式。
筆者設(shè)計(jì)的這一實(shí)例主要是通過PUSH注冊(cè)機(jī)制以及無線消息API兩者的結(jié)合來實(shí)現(xiàn)的,激活方式選用的是入站連接激活,實(shí)例的最終目的是運(yùn)用PUSH注冊(cè)機(jī)制完成具體的MIDlet應(yīng)用程序(具有信息接受功能)的自行啟動(dòng)。應(yīng)用程序主要由Reader 類、SendUI 類以及SMSMIDlet 類三個(gè)類構(gòu)成。從根本上將Reader類應(yīng)歸入到SMSMIDlet類中的一個(gè)內(nèi)部子類,在應(yīng)用程序中每個(gè)類的功能不同,具體如下:
Reader類:這個(gè)類的主要功能是實(shí)現(xiàn)接收各類短消息,并將接收到的消息顯示在Form上。當(dāng)系統(tǒng)初始化過程完成后,Reader就會(huì)被啟動(dòng),當(dāng)不存在短消息需要進(jìn)入時(shí),pending值即為零,此時(shí)線程也就處于等待狀態(tài)。當(dāng)存在短消息進(jìn)入時(shí),程序就會(huì)自動(dòng)調(diào)用notifyIncomingMessage()方法,這是Reader線程被喚醒,處于工作狀態(tài),便可接收短消息,然后將短消息的地址以及內(nèi)容在Form上進(jìn)行顯示。
SendUI類:這個(gè)類的主要功能是發(fā)送相關(guān)的短消息,當(dāng)移動(dòng)客戶端的用戶完成短消息內(nèi)容的輸入以及收信人地址或者號(hào)碼的輸入后,這個(gè)類便會(huì)通過啟動(dòng)新線程來完成短消息的發(fā)送。
SMSMIDlet類:這個(gè)類的功能是通過startApp()方法將界面初始化,同時(shí),完成服務(wù)器模式的 MessageConnection的創(chuàng)建,這樣便可以滿足SMSMIDlet接收短消息的要求。
將PUSH注冊(cè)添加到Netbeans IDE中,實(shí)際操作過程為【項(xiàng)目屬性】→【應(yīng)用程序描述符】→【推注冊(cè)】
通過運(yùn)行兩個(gè)模擬器來使用OTA方式運(yùn)行SMSMIDlet,點(diǎn)擊【菜單】→【啟動(dòng)】;
將5550001這一端口號(hào)寫入收信人處,然后完成短消息內(nèi)容的編寫,單擊【發(fā)送】→【是】,確認(rèn)發(fā)送后接收端程序就會(huì)被自動(dòng)激活,然后接收發(fā)送過來的短消息。
將PUSH注冊(cè)機(jī)制應(yīng)用到JAVA應(yīng)用程序開發(fā)過程中可以很好的解決一些實(shí)際問題,本文首先簡單介紹了PUSH注冊(cè)機(jī)制,在此基礎(chǔ)上對(duì)PUSH注冊(cè)機(jī)制如何實(shí)現(xiàn)應(yīng)用程序自動(dòng)啟動(dòng)運(yùn)行的過程進(jìn)行了詳細(xì)闡述。最后通過具體的實(shí)例對(duì)應(yīng)用程序開發(fā)中如何運(yùn)用PUSH技術(shù)進(jìn)行了演示,望本文的研究能夠?yàn)槌绦蜷_發(fā)人員提供一定的指導(dǎo)。
[1]趙霞.PUSH技術(shù)在JAVA移動(dòng)應(yīng)用程序開發(fā)中的應(yīng)用[J].電子技術(shù)與軟件工程,2015,11:256.
[2]趙景,張俊濤.PUSH注冊(cè)機(jī)制在JAVA移動(dòng)應(yīng)用程序開發(fā)中的使用[J].無線互聯(lián)科技,2014,05:199+256.
[3]陳玉濤.基于J2ME移動(dòng)終端的增值業(yè)務(wù)開發(fā)研究[D].華東師范大學(xué),2008.
[4]馬帆.基于J2ME和Web服務(wù)技術(shù)的企業(yè)移動(dòng)應(yīng)用研究與實(shí)現(xiàn)[D].長安大學(xué),2010.
[5]董航.移動(dòng)應(yīng)用程序檢測(cè)與防護(hù)技術(shù)研究[D].北京郵電大學(xué),2014.
莫足琴(1973—),女,湖北工業(yè)職業(yè)技術(shù)學(xué)院副教授,從計(jì)算機(jī)網(wǎng)絡(luò)技術(shù)、計(jì)算機(jī)應(yīng)用技術(shù)、高職教育改革方面的研究。