版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
遼寧輕工職業(yè)學(xué)院任務(wù)實(shí)現(xiàn)知識(shí)準(zhǔn)備任務(wù)目標(biāo)項(xiàng)目6界面數(shù)據(jù)更新的實(shí)現(xiàn)遼寧輕工職業(yè)學(xué)院任務(wù)1農(nóng)業(yè)大棚中溫濕度的實(shí)時(shí)顯示項(xiàng)目目標(biāo)遼寧輕工職業(yè)學(xué)院遼寧輕工職業(yè)學(xué)院智能農(nóng)業(yè)系統(tǒng)
境數(shù)據(jù)是以無(wú)線傳感器技術(shù)為基礎(chǔ),實(shí)現(xiàn)對(duì)農(nóng)業(yè)生產(chǎn)環(huán)境的監(jiān)測(cè)和邏輯控制。本任務(wù)農(nóng)業(yè)大棚中通過(guò)
ZigBee協(xié)調(diào)器模塊、ZigBee繼電器模塊與ZigBee溫濕度傳感器獲取到的溫濕度值,通過(guò)Handler-message的機(jī)制在移動(dòng)終端界面中完成數(shù)據(jù)的更新顯示。遼寧輕工職業(yè)學(xué)院【任務(wù)目標(biāo)】掌握消息處理類(Handler)的應(yīng)用掌握消息類(Message)的應(yīng)用1.消息類(Message)簡(jiǎn)介遼寧輕工職業(yè)學(xué)院【知識(shí)準(zhǔn)備】當(dāng)Android平臺(tái)啟動(dòng)一個(gè)應(yīng)用程序會(huì)開啟一個(gè)主線程(界面UI線程),由界面UI線程來(lái)管理所顯示的所有控件,并件,來(lái)響應(yīng)用戶并分發(fā)事件等。因此,在界面UI線用戶點(diǎn)擊事一般不執(zhí)行耗時(shí)的操作,如聯(lián)網(wǎng)
數(shù)據(jù)等,否則出現(xiàn)ANR錯(cuò)誤。所以就將這些操作放在子線
,但是由于AndroidUI線程是不安全的,所以只能在主線
更新UI。正如其他GUI應(yīng)用程序一樣,Android應(yīng)用程序也是消息(事件)驅(qū)動(dòng)的。這種消息的傳遞必須依賴于應(yīng)用框架提供的消息機(jī)制。Android本身提供了2種消息機(jī)制:組件間消息傳遞(Intent)和線程間消息傳遞(Message)。在此主要
Android線程間消息傳遞機(jī)制及其應(yīng)用。1.消息類(Message)簡(jiǎn)介遼寧輕工職業(yè)學(xué)院【知識(shí)準(zhǔn)備】android.os.Message是定義一個(gè)Messge包含必要的描述和屬性
數(shù)據(jù),并且此對(duì)象可以被發(fā)送給android.os.Handler處理。屬性字段:arg1、arg2、what、obj、replyTo等;其中arg1和arg2是用來(lái)存放
整型數(shù)據(jù)的;what是用來(lái)保存消息標(biāo)示的;obj是Object類型的任意
對(duì)象;replyTo是消息管理器,會(huì)關(guān)聯(lián)到一個(gè)handler,handler就是處理其中的消息。通常對(duì)Message對(duì)象不是直接new出來(lái)的,只要調(diào)用handler中的obtainMessage方法來(lái)直接獲得Message對(duì)象,現(xiàn)把常用到的一些方法說(shuō)明提供如下方法名稱含義Message()構(gòu)造一個(gè)新的Message對(duì)象Message
obtain
()從全局池中返回一個(gè)新的Message實(shí)例Message可理解為線程間交流的信息,處理數(shù)據(jù)
線程需要更新UI,則發(fā)送Message內(nèi)含一些數(shù)據(jù)給UI線程。
在單線程模型下,為了解決類似的問(wèn)題,Android設(shè)計(jì)了一個(gè)Message
Queue(消息隊(duì)列),
線程間可以通過(guò)該Message
Queue并結(jié)合Handler和Looper組件進(jìn)行信息交換。一個(gè)Message對(duì)象具有下表所對(duì)應(yīng)的屬性:1.消息類(Message)簡(jiǎn)介遼寧輕工職業(yè)學(xué)院【知識(shí)準(zhǔn)備】屬性類型描述arg1int用來(lái)存放整型數(shù)據(jù)arg2int用來(lái)存放整型數(shù)據(jù)objObject用來(lái)存放發(fā)送給 的Object類型的任意對(duì)象ReplyToMessenger用來(lái)指定此Message發(fā)送到何處的可選Messager對(duì)象whatint用于指定用戶自定義的消息代碼,這樣接收者可以了解這個(gè)消息的信息2.消息處理類(Handler)簡(jiǎn)介遼寧輕工職業(yè)學(xué)院【知識(shí)準(zhǔn)備】在使用Handler處理消息的時(shí)候,Handler一般會(huì)揮發(fā)兩個(gè)作用:1、在新線
發(fā)送消息;2、在主線程(界面線息。在實(shí)際的程序開發(fā)中,Handler類為開發(fā)獲取并處理消提供了便捷的開發(fā)策略,在新線程(可以是多個(gè)新線
編寫消息發(fā)送的功能代碼,在主線
接收、識(shí)別并處理。這就解決了何時(shí)發(fā)送何時(shí)處理的問(wèn)題。通過(guò)設(shè)計(jì)智能農(nóng)業(yè)移動(dòng)應(yīng)用相關(guān)業(yè)務(wù)參數(shù),需要熟悉和使用Handler類的相關(guān)方法,現(xiàn)把常用到的一些方法說(shuō)明提供如下方法名稱含義void handleMessage(Message
msg)主線程處理消息的方法;boolean
hasMessages(int
what,
Objectobject)檢查消息隊(duì)列是否包含有what屬性并且object屬性為指定對(duì)象的消息;finalboolean hasMessages(int
what)檢查消息隊(duì)列是否包含有what屬性的消息;finalMessage
obtainMessage()獲取消息;2.消息處理類(Handler)簡(jiǎn)介遼寧輕工職業(yè)學(xué)院【知識(shí)準(zhǔn)備】finalbooleanpost(Runnable
r)將一個(gè)線程添加到消息隊(duì)列;final
booleanpostDelayed(Runnabler,
long
delayMillis)將一個(gè)線程delayMillis毫秒后添加到消息隊(duì)列;finalbooleansendMessage(Message
msg)立即發(fā)送消息;finalbooleansendMessageDelayed(Message
msg,
longdelayMillis)延遲delayMillis毫秒后發(fā)送消息;2.消息處理類(Handler)簡(jiǎn)介遼寧輕工職業(yè)學(xué)院【知識(shí)準(zhǔn)備】在開發(fā)移動(dòng)應(yīng)用程序時(shí),開發(fā) 只需要重寫Handler類中的處理消息的handleMessage(Message
msg)方法,每當(dāng)新線程使用sendMessage(Message
msg)發(fā)送消息時(shí),Handler類會(huì)自動(dòng)回調(diào)handleMessage(Message
msg)的邏輯代碼。3.使用Handler傳遞消息遼寧輕工職業(yè)學(xué)院【知識(shí)準(zhǔn)備】使用Handler-Message消息傳遞機(jī)制更新主線程UI需要經(jīng)過(guò)以下步驟可以實(shí)現(xiàn):(1)在主線程Activity中創(chuàng)建Handler對(duì)象,并重寫handleMessage(Message
msg)方法;Handler
mHandler=new
Handler(){public
void
handleMessage(android.os.Message
msg){switch
(msg.what)
{case
0://對(duì)溫度值進(jìn)行操作break;case
1://對(duì)濕度值進(jìn)行操作break;case
2://對(duì)光照值進(jìn)行操作break;}};};3.使用Handler傳遞消息遼寧輕工職業(yè)學(xué)院【知識(shí)準(zhǔn)備】在新線
使用主線程創(chuàng)建的Handler對(duì)象,調(diào)用它的發(fā)送消息方法向主線程發(fā)送消息;Message
mMsg=new
Message();//創(chuàng)建Message對(duì)象mMsg.obj=0;//設(shè)置mMsg的傳輸值mMsg.what=ISTEMP;//設(shè)置mMsg的類型mHandler.sendMessage(mMsg);//通過(guò)構(gòu)造函數(shù)傳入的Handler發(fā)送Message利用Handler對(duì)象的handleMessage(Message
msg)方法接收消息,然后根據(jù)obj的不同取值執(zhí)行不同的業(yè)務(wù)邏輯(代碼見第一步);遼寧輕工職業(yè)學(xué)院【任務(wù)實(shí)現(xiàn)】在Eclipse下創(chuàng)建一個(gè)Android項(xiàng)目,命名為AndroidDemo6_1,將項(xiàng)目2任務(wù)8的界面導(dǎo)入到本項(xiàng)目中。在
.example.androiddemo6_1包中,新建一個(gè)類BasePort.java,用于打開Zigbee的四個(gè)輸入串口,定義openZigBeePort方法,打開ZigBee的端口,代碼如下:public
class
BasePort
{/**打開Zigbee四輸入串口@param
com
串
如COM0
COM1
COM2@param
mode區(qū)分是USB串口還是COM串口,0表示COM,遼寧輕工職業(yè)學(xué)院【任務(wù)實(shí)現(xiàn)】1
表示
USB,2表示是低頻與
頻*
@param
baudRate(0-9)波特率
0=1200
1=24002=4800
3=9600
4=19200
5=38400
6=57600
7=1152008=230400
9=921600*
@return串口*/public
int
openZigBeePort(int
com,int
mode,int
baudRate){Zigb=ZigBee ogServiceAPI.openPort(com,
mode,
baudRate);return
Zigb
;}遼寧輕工職業(yè)學(xué)院【任務(wù)實(shí)現(xiàn)】3.新建closeZigBeePort()方法用于四個(gè)輸入串口的關(guān)閉/***關(guān)閉Zigbee四輸入串口*/public
void
closeZigBeePort(){ZigBee
ogServiceAPI.closeUart();}遼寧輕工職業(yè)學(xué)院【任務(wù)實(shí)現(xiàn)】4.
在
.example.androiddemo6_1包中,再新建一個(gè)類FourInput.java繼承自BasePort.java類,定義三個(gè)整型的變量ISTEMP、ISHUMI、ISLIGHT分別代表溫度、濕度和光照感應(yīng),初始值分別為0、1、2;定義Handler類的對(duì)象mHandler初始值為null;定義mFourInput_fd
變量初始值為
0。public
class
FourInput
extends
BasePort
{private
final
int
ISTEMP
=
0;private
final
int
ISHUMI
=
1;private
final
int
ISLIGHT
=
2;private
Handler
mHandler
=
null;public
static
int
mFourInput_fd
=
0;遼寧輕工職業(yè)學(xué)院【任務(wù)實(shí)現(xiàn)】5.在重寫的FourInput()方法中,利用handler實(shí)現(xiàn)對(duì)頁(yè)面的更新,將打開四個(gè)端口獲得的溫度、濕度和波特率的值賦給變量mFourInput_fd,代碼如下:public
FourInput
(int
com,int
mode,int
baudRate,Handlerhandler){this.mHandler
=
handler;mFourInput_fd
=
openZigBeePort(com,
mode,baudRate);}遼寧輕工職業(yè)學(xué)院【任務(wù)實(shí)現(xiàn)】6.在重寫的start方法中,創(chuàng)建ZigBeeService的對(duì)象,并對(duì)其進(jìn)行實(shí)例化,且開啟服務(wù)。利用ZigBee
ogServiceAPI的getTemperature方法更新溫度信息。代碼如下:ZigBee
ogServiceAPI.getTemperature("temp",
newOnTemperatureResponse(){@Overridepublic
void
onValue(String
arg0)
{//創(chuàng)建Message對(duì)象Message
mMsg
=
new
Message();//設(shè)置mMsg的傳輸值mMsg.obj
=
arg0;遼寧輕工職業(yè)學(xué)院【任務(wù)實(shí)現(xiàn)】//設(shè)置mMsg的類型mMsg.what
=
ISTEMP;//通過(guò)構(gòu)造函數(shù)傳入的Handler發(fā)送MessagemHandler.sendMessage(mMsg);}@Overridepublic
void
onValue(double
arg0)
{}});遼寧輕工職業(yè)學(xué)院【任務(wù)實(shí)現(xiàn)】重寫的start方法中,創(chuàng)建ZigBeeService的對(duì)象,并對(duì)其進(jìn)行實(shí)例化,且開啟服務(wù)。利用ZigBee
ogServiceAPI的getHum方法更新濕度的值重寫的start方法中,創(chuàng)建ZigBeeService的對(duì)象,并對(duì)其進(jìn)行實(shí)例化,且開啟服務(wù)。利用ZigBee
ogServiceAPI的getLight方法更新光照的值在MainActivity.java中,定義TextView類的三個(gè)對(duì)象mTvTemp,mTvHumi,mTvLight和FourInput類的對(duì)象mfourInput初始值為null。代碼如下:private
TextView
mTvTemp,mTvHumi,mTvLight;private
FourInput
mFourInput
=null遼寧輕工職業(yè)學(xué)院【任務(wù)實(shí)現(xiàn)】10.在重寫的onCreate方法中,調(diào)用initView()方法(需自定義),對(duì)視圖進(jìn)行初始化,將四輸入接入COM1,并開啟四個(gè)輸入端口protected
void
onCreate(Bundle
savedInstanceState){super.onCreate(savedInstanceState);setConten
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 新高考2021屆高三地理下學(xué)期4月第三次模擬考試題一
- 成語(yǔ)中常見的詞類活用歸類
- 2024年印刷檢測(cè)儀器項(xiàng)目發(fā)展計(jì)劃
- 2024年谷胱甘肽及酵母提取物項(xiàng)目建議書
- 2024年陶瓷片狀磷擴(kuò)散沅合作協(xié)議書
- 八年級(jí)上冊(cè)歷史知識(shí)點(diǎn)提升練習(xí)02-全練版:第10課中華民國(guó)的創(chuàng)建
- 2024年其他煤炭采選產(chǎn)品(低熱值燃料)項(xiàng)目建議書
- 餐飲設(shè)備運(yùn)輸物流協(xié)議
- 液體貨物運(yùn)輸合同樣板
- 汽車整車包機(jī)運(yùn)輸合同樣本
- 2024年度山東省招聘社區(qū)工作者試題及答案
- 高中體育校本教材
- 提高首次病情護(hù)理記錄單書寫的規(guī)范率 2
- 空調(diào)管路設(shè)計(jì)規(guī)范
- 杭州地圖高清全圖矢量可編輯全市各縣區(qū)行政區(qū)劃地圖
- 平安產(chǎn)險(xiǎn)江蘇省中央財(cái)政水稻種植保險(xiǎn)條款
- 2016程序文件-文件控制程序
- 幼兒吸管游戲案例分析
- 2023年信息安全題庫(kù)及參考答案
- 陜西西安簡(jiǎn)介課件
- 2022年北京八一學(xué)校初二(上)期中英語(yǔ)試卷及答案
評(píng)論
0/150
提交評(píng)論