孫 軻
(電子科技大學(xué)成都學(xué)院,四川成都 610000)
作為手機(jī)快速崛起并且被越來(lái)越多的人廣泛使用的時(shí)代,手機(jī)相關(guān)程序的開(kāi)發(fā)必然會(huì)越來(lái)越受到重視,無(wú)論是電腦的桌面應(yīng)用還是手機(jī)的程序應(yīng)用,面對(duì)更多的還是用戶,實(shí)現(xiàn)最多的是對(duì)于不同用戶動(dòng)作的積極處理,也就是意味著需要對(duì)每一個(gè)用戶的動(dòng)作進(jìn)行積極響應(yīng),而對(duì)用戶積極響應(yīng)的處理機(jī)制就是指對(duì)事件的處理。
在一個(gè)應(yīng)用系統(tǒng)中,不同軟件模塊之間都會(huì)預(yù)留接口,按照調(diào)用方式的不同分為3個(gè)主要方面,分別是同步調(diào)用、回調(diào)以及異步調(diào)用。同步調(diào)用是一種阻塞式調(diào)用,調(diào)用方需等被調(diào)用方完成指令返回后才能繼續(xù)進(jìn)行,在被調(diào)用方執(zhí)行指令期間,調(diào)用方處于被完全阻塞的狀態(tài);同步調(diào)用是一種單向調(diào)用,但是回調(diào)不同,回調(diào)是一種雙向調(diào)用模式,指被調(diào)用方在被調(diào)用的同時(shí)也能調(diào)用對(duì)方的接口,而異步調(diào)用指一種消息或者事件的發(fā)生機(jī)制,但與一般的消息或者事件機(jī)制的調(diào)用方向相反,位于接口的服務(wù)在收到消息或是發(fā)生某種事件后,會(huì)主動(dòng)調(diào)用客戶方接口。軟件開(kāi)發(fā)時(shí),一般都會(huì)選擇回調(diào)與異步調(diào)用共同執(zhí)行完成任務(wù),使用回調(diào)完成軟件開(kāi)發(fā)過(guò)程中對(duì)異步消息的注冊(cè),而使用異步調(diào)用實(shí)現(xiàn)對(duì)消息的通知,在這3類調(diào)用方式中,同步調(diào)用的程序與使用最為簡(jiǎn)單,回調(diào)則可以認(rèn)為是異步調(diào)用的基礎(chǔ)。
設(shè)計(jì)程序時(shí),使用不同類型的程序語(yǔ)言、構(gòu)建平臺(tái)以及構(gòu)建框架,對(duì)于這些東西而言,不同的客戶端與服務(wù)端的交叉用到的絕對(duì)不僅僅是同步調(diào)用的方式,更多的還是異步調(diào)用,主要功能是讓接口提供方能在某些情況發(fā)生時(shí)主動(dòng)通知客戶,我們所說(shuō)的回調(diào),是能夠?qū)崿F(xiàn)一步消息模式的一個(gè)簡(jiǎn)單途徑,所謂回調(diào),對(duì)于一般的程序設(shè)計(jì)語(yǔ)言來(lái)說(shuō),實(shí)現(xiàn)過(guò)程并不是很復(fù)雜,可以通過(guò)簡(jiǎn)單的回調(diào)函數(shù)實(shí)現(xiàn),回調(diào)函數(shù)也是一個(gè)過(guò)程,但與其他面向?qū)ο蟮倪^(guò)程不同的是,主要還是能由調(diào)用方自己實(shí)現(xiàn)、然后反過(guò)來(lái)讓被調(diào)用方進(jìn)行使用的一種特殊函數(shù),除此之外,如果程序語(yǔ)言是面向客戶的語(yǔ)言,那么其回調(diào)的實(shí)現(xiàn)一般通過(guò)接口或者抽象類函數(shù)來(lái)實(shí)現(xiàn),這種接口稱為回調(diào)類接口,這種對(duì)象稱為回調(diào)類對(duì)象。
以處理原理的不同為劃分依據(jù),Android系統(tǒng)的處理機(jī)制可分為2種,其中一種回調(diào)方法是把回調(diào)制作作為劃分依據(jù),另外一種則是以監(jiān)聽(tīng)器接口為基礎(chǔ)。對(duì)于圖形用戶界面而言,基于回調(diào)機(jī)制的事件處理應(yīng)用得更加廣泛,Android系統(tǒng)中每一個(gè)回調(diào)函數(shù)和接口,對(duì)事件的處理方法都不相同,開(kāi)發(fā)人員可以根據(jù)實(shí)際情況對(duì)這些回調(diào)方法進(jìn)行重寫,達(dá)到對(duì)事件影響的目的。如果某一事件沒(méi)有任何模塊對(duì)其進(jìn)行處理,那么系統(tǒng)可能會(huì)對(duì)Activity中的回調(diào)方法進(jìn)行調(diào)用,從而確保所有事件都處于被處理狀態(tài)。
是一種相對(duì)抽象的回調(diào)方法,該回調(diào)方法曾經(jīng)被接口KeyEvent.Callback使用,目前所有的View在使用過(guò)程中都能實(shí)現(xiàn)這種接口的編寫目的以及對(duì)這個(gè)方法進(jìn)行重新編寫,這種回調(diào)方式主要用于手機(jī)鍵盤被按下時(shí)發(fā)生的事件的捕捉,這種方法來(lái)自于基于鍵盤的布爾參數(shù),參數(shù)中keyboard扮演的角色極為重要,其所指的是在參數(shù)輸入后轉(zhuǎn)換出的鍵值,即常說(shuō)的鍵盤碼。在手機(jī)輸入中,每個(gè)按鈕對(duì)應(yīng)的鍵盤碼都是唯一的,應(yīng)用程序之間邏輯關(guān)系的獲得可以通過(guò)返回的鍵盤碼來(lái)實(shí)現(xiàn),通過(guò)對(duì)不同鍵盤碼的分析,可以了解用戶究竟按下了哪個(gè)鍵盤當(dāng)中的鍵。參數(shù)event在整個(gè)回調(diào)過(guò)程中也是非常重要的,這個(gè)參數(shù)主要指的是按鍵事件的對(duì)象,這些對(duì)象包含的內(nèi)容非常多,如對(duì)某個(gè)事件的觸發(fā)方法以及觸發(fā)某一事件所需要的詳細(xì)信息等都是按鍵事件的對(duì)象。一般情況下,觸發(fā)事件所需要的信息主要包括事件的類型、狀態(tài)、發(fā)生事件等。onKeyDowm方法主要是在用戶按下按鍵時(shí),系統(tǒng)自動(dòng)將按鍵的信息以及希望對(duì)應(yīng)完成的事件封裝成KeyEven對(duì)象的形式進(jìn)行返回處理,使應(yīng)用程序進(jìn)一步被使用。這種形式返回值的參數(shù)類型是布爾類型,即如果返回值為true,代表這個(gè)事件已經(jīng)得到完整處理,如果返回值為false狀態(tài),則表示這個(gè)事件處理的還不夠完全,需要采用其他回調(diào)方式進(jìn)行進(jìn)一步處理,這種情況下考慮的方法主要為Activity中的回調(diào)方法。
與onKeyDowm方法異曲同工,這2種方法采用的都是接口KeyEvent.Callback曾使用過(guò)的抽象回調(diào)方法,并且目前所有的View使用時(shí)全都實(shí)現(xiàn)了這種接口的編寫目的以及對(duì)于這個(gè)方法進(jìn)行了重新編寫,這個(gè)方法的出現(xiàn)主要是為了實(shí)現(xiàn)對(duì)手機(jī)鍵盤按鍵抬起的事件的捕捉。參數(shù)及返回值的意義與onKeyDowm方法比較類似。
與前面2種方法不同,這種方法在整個(gè)View大類中是一種對(duì)于方法的全新定義,而且整個(gè)大類中所有的子類都實(shí)現(xiàn)了對(duì)于這個(gè)方法的重寫,其主要含義是手機(jī)的應(yīng)用程序能以這種方式為手段,使手機(jī)屏幕的觸摸事件可以被處理,主要是針對(duì)觸屏手機(jī)而言。這個(gè)過(guò)程涉及幾個(gè)參數(shù),首先是參數(shù)event,這個(gè)參數(shù)是指這個(gè)事件的對(duì)象,是作為手機(jī)屏幕觸摸事件封裝類的對(duì)象而存在的,這個(gè)參數(shù)中包括這個(gè)事件的所有必要信息,如觸摸位置、發(fā)生觸摸的時(shí)間以及類型等。用戶觸摸手機(jī)屏幕時(shí),這個(gè)對(duì)象會(huì)被創(chuàng)建,然后對(duì)象的返回值返回,這種方式產(chǎn)生的返回值和鍵盤響應(yīng)里的返回值基本相同,機(jī)制也基本相同,返回值為true,代表這個(gè)事件已經(jīng)得到完整的處理;返回值為false,則說(shuō)明這個(gè)事件處理的還不夠完全,需要通過(guò)其他回調(diào)方法對(duì)其進(jìn)行進(jìn)一步處理。這個(gè)方法與鍵盤方法的主要區(qū)別在于這種方法不是單純的處理一種事件,而是可以多種事件一起進(jìn)行處理,使用不同的動(dòng)作值來(lái)進(jìn)行區(qū)分。
這個(gè)方法的使用方式以及使用原理和前幾個(gè)回調(diào)方法基本類似,也可以在Activity以及View當(dāng)中實(shí)現(xiàn)對(duì)于這個(gè)方法的重寫,下面主要介紹這幾個(gè)方法當(dāng)中的參數(shù),首先是關(guān)于參數(shù)event,參數(shù)event是指對(duì)于手機(jī)軌跡球的封裝,這個(gè)參數(shù)能夠完成對(duì)手機(jī)軌跡球事件的封裝,像對(duì)觸發(fā)時(shí)間詳細(xì)信息的記錄、事件類型等都是事件封裝的主要內(nèi)容。在手機(jī)用戶對(duì)軌跡球進(jìn)行操控時(shí)對(duì)象會(huì)被創(chuàng)建,首先需要了解一下軌跡球與鍵盤的差別,手機(jī)對(duì)于軌跡球的設(shè)計(jì)比鍵盤的存在更加美觀,可以加強(qiáng)用戶對(duì)手機(jī)的印象分,而且在部分使用觸摸屏的手機(jī),某些型號(hào)的手機(jī)以及某些使用手機(jī)玩游戲的用戶而言,使用軌跡球比鍵盤方便很多,而且對(duì)應(yīng)的軌跡也更加細(xì)化,還能進(jìn)行更加精細(xì)的過(guò)程控制,相應(yīng)的在進(jìn)行控制時(shí),后臺(tái)的狀態(tài)對(duì)應(yīng)數(shù)值變化更加細(xì)致,甚至在模擬器運(yùn)行時(shí),使用軌跡球可以通過(guò)鼠標(biāo)的控制進(jìn)行軌跡球的運(yùn)行狀態(tài)模擬,這類手機(jī)設(shè)計(jì)出的軌跡球比只具有手機(jī)鍵盤的美觀性更加突出,能給用戶更好的使用體驗(yàn)。軌跡球的使用也比較簡(jiǎn)單,如在某些游戲中通過(guò)軌跡球的使用可以使整個(gè)控制過(guò)程更加合理。與普通鍵盤相比,軌跡球細(xì)化程度更強(qiáng),即在使用軌跡球時(shí),后臺(tái)表示狀態(tài)的數(shù)值會(huì)呈現(xiàn)更細(xì)微、更精準(zhǔn)的變化。在模擬器正常運(yùn)行狀態(tài)下,用戶可以通過(guò)F6鍵打開(kāi)模擬器中的軌跡球,然后可以通過(guò)鼠標(biāo)的移動(dòng)達(dá)到模擬軌跡球事件的目的。
與前面幾種方法不同的是,這種方法可以進(jìn)行焦點(diǎn)改變,如果其中的某一個(gè)控件采用這種方法,就會(huì)在焦點(diǎn)改變時(shí)進(jìn)行焦點(diǎn)改變事件的處理。
Android主要應(yīng)用于手機(jī)操作系統(tǒng),所以必然要在手機(jī)上進(jìn)行合理的正常運(yùn)行,手機(jī)作為智能硬件,與計(jì)算機(jī)相比,計(jì)算及存儲(chǔ)能力都十分有限,所以并不適合用于大型的計(jì)算場(chǎng)合和辦公場(chǎng)合,而是作為客戶端軟件的載體,因?yàn)樽鳛榭梢阅迷谑种械目蛻舳耍謾C(jī)可以充分發(fā)揮其攜帶方便以及易于交互的優(yōu)勢(shì),可以隨時(shí)進(jìn)行某個(gè)程序的運(yùn)行,也可以隨時(shí)進(jìn)行網(wǎng)絡(luò)訪問(wèn),實(shí)現(xiàn)網(wǎng)絡(luò)與服務(wù)器的交互。