摘 要:隨著Android手機(jī)的發(fā)展,Android移動(dòng)設(shè)備中的傳感器在移動(dòng)應(yīng)用程序開發(fā)中扮演著重要的角色。本文簡(jiǎn)要闡述了傳感器的研究現(xiàn)狀,探討了傳感器的調(diào)用機(jī)制、底層框架及消息隊(duì)列。同時(shí)提出了一種傳感器并發(fā)工作時(shí)優(yōu)化消息隊(duì)列優(yōu)先級(jí)的方法,用來(lái)提高資源的利用率。文章最后介紹了傳感器在手機(jī)涂鴉項(xiàng)目中的應(yīng)用。
關(guān)鍵詞:Android;傳感器;消息隊(duì)列;優(yōu)先級(jí);涂鴉
中圖分類號(hào):TP301 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1674-7712 (2014) 14-0000-02
經(jīng)過(guò)20多年的發(fā)展,智能手機(jī)越來(lái)越傾向于娛樂(lè)商務(wù)。安卓作為一種廣泛使用的系統(tǒng)平臺(tái),各種傳感器的應(yīng)用使它能夠滿足各種娛樂(lè)商務(wù)應(yīng)用的要求,比如現(xiàn)在比較流行的微信的“搖一搖”添加好友、滾鋼珠游戲等。各種傳感器的應(yīng)用也是多種多樣,像加速度傳感器,它提供了手機(jī)在各個(gè)方向上的加速度,而基于這些數(shù)據(jù),我們可以實(shí)現(xiàn)搖一搖測(cè)速等功能;陀螺儀提供了手機(jī)在各個(gè)方向上的傾角,應(yīng)用于游戲可以實(shí)現(xiàn)桌面球的滾動(dòng)等??梢哉f(shuō),在多種多樣的傳感器的基礎(chǔ)上,又衍生出了豐富多彩的應(yīng)用模式,想象力有多豐富,操作就有多豐富。
一、傳感器簡(jiǎn)介及調(diào)用機(jī)制
(一)傳感器分類及調(diào)用機(jī)制。從Android1.5開始,系統(tǒng)內(nèi)置對(duì)傳感器的支持多達(dá)8種,它們分別是:加速度傳感器、方向傳感器、磁力傳感器、陀螺儀、環(huán)境光照傳感器、壓力傳感器、溫度傳感器和近距離傳感器。谷歌在傳感器部分提供了統(tǒng)一的硬件抽象層接口供開發(fā)者調(diào)用,在底層是通過(guò)宏定義來(lái)指定傳感器硬件的ID,如光亮傳感器的宏定義為#define SENSOR_TYPE_LIGHT。在注冊(cè)具體傳感器服務(wù)時(shí),只需將傳感器的宏定義作為參數(shù)傳給sensorManager.getDefaultSensor(Sensor.Type_LIGHT)函數(shù),就可以進(jìn)一步獲取該傳感器的服務(wù)。傳感器調(diào)用機(jī)制共分為五步:第一步,通過(guò)調(diào)用getSystemService(SENSOR_SERVICE)函數(shù)獲取系統(tǒng)傳感器服務(wù);第二步,將具體類型傳感器作為參數(shù),通過(guò)調(diào)用getDefaultSensor()函數(shù)指定具體類型傳感器的實(shí)現(xiàn);第三步,通過(guò)調(diào)用registerListener()函數(shù)注冊(cè)具體類型傳感器;第四步,實(shí)現(xiàn)回調(diào)函數(shù),主要實(shí)現(xiàn)void onAccuracyChanged(int sensor,int accuracy)和void onSensorChanged(int sensor,float[]values)函數(shù);第五步,通過(guò)調(diào)用unregisterListener()函數(shù)注銷具體傳感器的使用。
(二)Android傳感器架構(gòu)。開發(fā)人員在Java層使用Sensor API開發(fā)應(yīng)用程序時(shí),主要是通過(guò)Java本地調(diào)用調(diào)用Android運(yùn)行庫(kù)層中的SensorManager服務(wù),進(jìn)一步調(diào)用傳感器硬件抽象層接口,再調(diào)用不同的硬件抽象層實(shí)現(xiàn),最后操作具體的傳感器硬件驅(qū)動(dòng)。
(三)消息隊(duì)列。對(duì)于應(yīng)用程序來(lái)說(shuō),安卓系統(tǒng)中的Java應(yīng)用程序是靠消息驅(qū)動(dòng)來(lái)工作的,消息隊(duì)列類封裝了與消息隊(duì)列有關(guān)的操作,其中消息隊(duì)列和消息處理循環(huán)是其核心部分。其基本原理如下:(1)有一個(gè)消息隊(duì)列,事件源把待處理的消息按執(zhí)行時(shí)間排序,從消息隊(duì)列隊(duì)尾加入到消息隊(duì)列中;(2)有一個(gè)消息循環(huán),消息處理線程不斷從消息隊(duì)列隊(duì)首取出消息進(jìn)行處理。
Java層的MessageQueue類負(fù)責(zé)提供一個(gè)消息隊(duì)列和消息操作的函數(shù)接口;Looper類負(fù)責(zé)循環(huán)處理消息,Looper中有一個(gè)Message隊(duì)列,里面存儲(chǔ)的是一個(gè)個(gè)待處理的Message;Message中有一個(gè)Handler,該Handler是用來(lái)處理Message。
二、傳感器并發(fā)與消息隊(duì)列優(yōu)化
四、結(jié)束語(yǔ)
本文主要介紹了基于安卓傳感器的架構(gòu)及調(diào)用,并且結(jié)合消息隊(duì)列提出了一種傳感器并發(fā)工作時(shí)的資源優(yōu)化策略,該策略可以達(dá)到及時(shí)釋放傳感器占用的資源,提高資源利用率。最后介紹了傳感器在手機(jī)涂鴉項(xiàng)目中的應(yīng)用,相對(duì)于傳統(tǒng)的涂鴉軟件,在手機(jī)涂鴉中應(yīng)用傳感器可極大的提高用戶體驗(yàn)。
參考文獻(xiàn):
[1]尹邦杰,黃曉瑩.淺析Android手機(jī)傳感器機(jī)制及應(yīng)用設(shè)計(jì)舉例[J].計(jì)算機(jī)光盤軟件與應(yīng)用,2013(05):148.
[2]韓迪,潘志宏.基于Android移動(dòng)設(shè)備傳感器的體感應(yīng)用[J].華南理工大學(xué)學(xué)報(bào)(自然科學(xué)版),2012(09):75-80.
[3]徐乃煊,鄒仕洪.基于Android平臺(tái)的運(yùn)動(dòng)識(shí)別系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[EB/OL].中國(guó)科技論文在線,2013.
[4]莊翠翠,李成榮,韋瑋.基于Android系統(tǒng)的多傳感器移動(dòng)體感應(yīng)用[J].計(jì)算機(jī)系統(tǒng)應(yīng)用,2013(08).
[5]王春紅.基于Android系統(tǒng)的傳感器設(shè)計(jì)[J].湖南農(nóng)機(jī)(學(xué)術(shù)版),2013(04):140-141.
[6]黃蓉.Android消息處理機(jī)制研究[J].黑龍江科技信息,2012(33):87.
[作者簡(jiǎn)介]陳肖肖(1992.01-),山東青島人,中國(guó)石油大學(xué)(華東)計(jì)算機(jī)與通信工程學(xué)院,本科在讀,研究方向:軟件工程。