利用Android系統(tǒng)API的訪問代價模型優(yōu)化移動應(yīng)用程序的方法
【專利摘要】一種利用Android系統(tǒng)API的訪問代價模型優(yōu)化移動應(yīng)用程序的方法。首先利用功耗測量工具和Sensing?API測試程序度量出特定智能手機平臺上MSA訪問Sensing?API的訪問代價模型;然后基于該訪問代價模型提供能耗優(yōu)化的訪問接口,記為Sensing?API*,使之取代相應(yīng)的Sensing?API;MSA通過Sensing?API*訪問傳感數(shù)據(jù)以節(jié)省系統(tǒng)能耗。通過本發(fā)明所提供的基于Android系統(tǒng)API的訪問代價模型優(yōu)化移動應(yīng)用程序的方法,可以有效地降低移動傳感應(yīng)用程序的能耗開銷;同時,通過代碼插樁實現(xiàn)的Sensing?API重定向機制使得本發(fā)明提出的方法具有更加廣泛的適用性。
【專利說明】利用Android系統(tǒng)API的訪問代價模型優(yōu)化移動應(yīng)用程序的方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明提供了一種優(yōu)化移動應(yīng)用程序的方法,具體涉及一種利用Android系統(tǒng)API的訪問代價模型優(yōu)化移動應(yīng)用程序的方法,屬于移動計算領(lǐng)域。
【背景技術(shù)】
[0002]智能手機促進了移動傳感技術(shù)的發(fā)展和應(yīng)用。智能手機一般內(nèi)嵌了豐富的傳感器,包括加速度傳感器、螺旋儀、距離傳感器、GPS、攝像頭、麥克風(fēng)等。移動應(yīng)用程序可以借助這些傳感器確定用戶的狀態(tài)、位置和環(huán)境信息等,從而增強用戶體驗,例如:地圖、導(dǎo)航應(yīng)用和社交網(wǎng)絡(luò)移動應(yīng)用需要感知用戶的位置信息,計步器需要感知用戶的移動狀態(tài)。這類移動傳感應(yīng)用程序通常使用移動操作系統(tǒng)(如:Android, iOS, Windows Phone等)提供的傳感器訪問接口獲取傳感數(shù)據(jù)。對于來自Google Play官方市場的I萬多個流行應(yīng)用程序進行分析發(fā)現(xiàn):超過55%的移動應(yīng)用程序是移動傳感應(yīng)用程序。
[0003]但是,移動傳感,尤其是連續(xù)性的移動傳感,會顯著地增加系統(tǒng)能耗。 文 獻(A Survey of Mobile Phone Sensing.1EEE CommunicationsMagazine, 2010, 48(9): 140 - 150.)給出的研究數(shù)據(jù)表明:連續(xù)性移動傳感應(yīng)用程序會導(dǎo)致手機待機時間(standby time)從20個小時左右下降到6個小時。一方面,移動傳感應(yīng)用程序獲取傳感信息時需要訪問傳感器硬件;而使用這些硬件傳感部件會導(dǎo)致手機功耗增加,特別是有些傳感器硬件的功耗非常高,例如:攝像頭和GPS等。另一方面,部分移動傳感應(yīng)用程序需要持續(xù)性頻繁地訪問傳感器,從而導(dǎo)致高能耗。
[0004]針對移動傳感應(yīng)用程序的高能耗問題,已經(jīng)有一些能耗優(yōu)化的技術(shù),主要對特定應(yīng)用程序使用傳感器訪問接口的行為進行改善以求降低能耗,例如:通過調(diào)節(jié)調(diào)用傳感器訪問接口的頻率或者緩存最新的傳感數(shù)據(jù)并且在短期內(nèi)復(fù)用,減少對傳感器部件的直接訪問。已有的這類工作在度量智能手機傳感信息獲取代價時一般僅考慮功耗開銷,而未考慮時間開銷。此外,這些技術(shù)需要針對移動應(yīng)用本身進行優(yōu)化,難以適用于已有的眾多移動傳感應(yīng)用程序。
【發(fā)明內(nèi)容】
[0005]為了便于表述,本文約定:Sensing API是移動操作系統(tǒng)提供的傳感API(訪問傳感器的應(yīng)用程序編程接口,API表示應(yīng)用程序編程接口);MSA表示移動傳感應(yīng)用程序(MobileSensing Applications),即使用了 Sensing API獲取傳感器數(shù)據(jù)的移動應(yīng)用程序。
[0006]本發(fā)明的目的是提供一種利用Android系統(tǒng)API的訪問代價模型優(yōu)化移動應(yīng)用程序的方法,用以解決移動傳感應(yīng)用程序的高能耗問題。
[0007]本發(fā)明提供的技術(shù)方案如下:
[0008]—種利用Android系統(tǒng)API的訪問代價模型優(yōu)化移動應(yīng)用程序的方法,其特征是,首先利用功耗測量工具和Sensing API測試程序度量出特定智能手機平臺上MSA訪問Sensing API的訪問代價模型;然后基于該訪問代價模型提供能耗優(yōu)化的訪問接口,記為Sensing API*,使之取代相應(yīng)的Sensing API ;MSA通過Sensing API*訪問傳感數(shù)據(jù)以節(jié)省系統(tǒng)能耗;
[0009]其中,Sensing API表示移動操作系統(tǒng)提供的訪問傳感器的應(yīng)用程序編程接口,MSA表示移動傳感應(yīng)用程序;所述訪問代價模型包括功耗開銷和時間開銷。
[0010]所述的優(yōu)化移動應(yīng)用程序的方法,其特征是,獲取訪問代價模型的方法為:
[0011]Al.選定所述手機平臺上的SensingAPI集合;
[0012]A2.針對選定的Sensing API集合,編寫測試程序,該測試程序能夠周期性頻繁地訪問指定的API,并且能夠測量訪問指定API的時延;
[0013]A3.在所述手機平臺上運行上述測試程序,由測試程序記錄訪問每個Sensing API的時延,并且使用Power Monitor等外置功耗測量工具實時測量訪問指定API的系統(tǒng)功耗;
[0014]A4.利用步驟A3中獲得的時延數(shù)據(jù)和功耗數(shù)據(jù),獲得該平臺上Sensing API的訪問代價模型。
[0015]所述的優(yōu)化移動應(yīng)用程序的方法,其特征是,所述的訪問代價模型由功耗開銷和時間開銷組成,分別記為E (Sensing API)和T (Sensing API) ;E (Sensing API)是訪問傳感器API的能耗或者功耗開銷,T (Sensing API)代表訪問傳感器API的時延;使用下面的公式計算:
[0016]E (Xapi) = (Ptest*Ttest)/Ntest
[0017]T (Xapi) =Ttest/Ntest
[0018]其中,Xapi表示訪問傳感器X的Sensing API,是步驟Al中選出的Sensing API集合的成員;ptest和Ttest表示系統(tǒng)由于運行步驟A3所述的測試程序而增加的系統(tǒng)功耗和總耗時;Ntest表示時間段Ttest內(nèi)訪問Xapi的總次數(shù)。
[0019]所述的優(yōu)化移動應(yīng)用程序的方法,其特征是,所述能耗優(yōu)化的訪問接口 SensingAPI*的實現(xiàn)方法為:
[0020]B1.對于周期性訪問的Sensing API,通過自適應(yīng)調(diào)頻的方式來動態(tài)地調(diào)節(jié)訪問API的頻率,編寫代碼把系統(tǒng)提供的Sensing API封裝為經(jīng)過能耗優(yōu)化的Sensing API*,二者在接口和語義上保持一致,區(qū)別之處在于Sensing API*是低能耗的訪問接口 ;
[0021]B2.對于連續(xù)性訪問的Sensing API,通過由其他低能耗的Sensing API獲得的情景信息進行優(yōu)化,包括:
[0022]以下情況時關(guān)閉攝像頭傳感器和聲音傳感器:手機處于鎖屏狀態(tài);手機亮度傳感器返回的傳感數(shù)據(jù)表明環(huán)境足夠黑暗;用戶處于高速運動狀態(tài);
[0023]當(dāng)檢測到環(huán)境中無聲音時動態(tài)降低聲音采樣頻率;
[0024]B3.對于提供位置信息的Sensing API,基于手機的狀態(tài)信息進行能耗優(yōu)化,并且封裝為低能耗的Sensing API*接口 ;包括:手機處于室內(nèi)時關(guān)閉GPS傳感器;手機處于靜止狀態(tài)時可以關(guān)閉GPS傳感器。
[0025]所述的優(yōu)化移動應(yīng)用程序的方法,其特征是,對于新開發(fā)的MSA,直接使用SensingAPI*來訪問傳感器數(shù)據(jù);而對于已有的MSA,則通過代碼插樁的方式用Sensing API*替換原有系統(tǒng)提供的Sensing API,然后利用應(yīng)用程序重打包技術(shù)發(fā)布經(jīng)過插樁的應(yīng)用程序。
[0026]所述的優(yōu)化移動應(yīng)用程序的方法,其特征是,所述自適應(yīng)調(diào)頻的適用情形為:當(dāng)Sensing API返回的傳感數(shù)據(jù)變化量小于一個閾值Xap1-Thresholdmin時,自動降低訪問Sensing API的頻率;當(dāng)Sensing API返回的傳感數(shù)據(jù)變化量大于另一個閾值Xap1-Thresholdmax時,自動提升訪問Sensing API的頻率;這些自適應(yīng)調(diào)頻的機制實現(xiàn)在Sensing API*代碼中,因此該機制對于MSA具有透明性。
[0027]所述的優(yōu)化移動應(yīng)用程序的方法,其特征是,對于已有的MSA,執(zhí)行如下操作:
[0028]Dl.把Sensing API*編譯為Java類庫,并且轉(zhuǎn)換為Android Dalvik字節(jié)碼文件;
[0029]D2.使用反匯編工具把包含了 Sensing API*的Dalvik字節(jié)碼文件轉(zhuǎn)換為中間表示法;
[0030]D3.利用APK插樁工具把已有應(yīng)用程序中的Sensing API重定向到Sensing API*中;
[0031]D4.利用APK重打包工具把經(jīng)過插樁的代碼重打包為新的MSA。
[0032]本發(fā)明的有益效果:通過本發(fā)明所提供的基于Android系統(tǒng)API的訪問代價模型優(yōu)化移動應(yīng)用程序的方法,可以有效地降低移動傳感應(yīng)用程序的能耗開銷;同時,通過代碼插樁實現(xiàn)的SensingAPI重定向機制使得本發(fā)明提出的方法具有更加廣泛的適用性。
【專利附圖】
【附圖說明】
[0033]圖1是本發(fā)明的流程圖。
【具體實施方式】
[0034]本發(fā)明的實施方式如下:
[0035]A.獲取特定Android手機平臺中Sensing API的訪問代價模型,實現(xiàn)方法為:
[0036]Al.選定該手機平臺上的SensingAPI集合(即一組用于收集傳感器數(shù)據(jù)的系統(tǒng)API);
[0037]A2.針對選定的Sensing API集合,編寫測試程序,該測試程序能夠周期性頻繁地訪問指定的API,并且能夠測量訪問指定API的時延;
[0038]A3.在該手機平臺上運行上述測試程序,由測試程序記錄訪問每個Sensing API的時延,并且使用Power Monitor等外置功耗測量工具實時測量訪問指定API的系統(tǒng)功耗;
[0039]A4.利用步驟A3中獲得的時延數(shù)據(jù)和功耗數(shù)據(jù),獲得該平臺上Sensing API的訪問代價模型;
[0040]B.基于步驟A所獲得的訪問代價模型,編寫代碼實現(xiàn)經(jīng)過能耗優(yōu)化的訪問接口(即Sensing API*),實現(xiàn)方法為:
[0041]B1.對于周期性訪問的Sensing API (例如:螺旋儀、加速度傳感器、磁場強度傳感器等),通過自適應(yīng)調(diào)頻的方式來動態(tài)地調(diào)節(jié)訪問API的頻率,編寫代碼把系統(tǒng)提供的Sensing API封裝為經(jīng)過優(yōu)化的Sensing API*。二者從接口上保持一致,語義也保持一致,區(qū)別之處在于Sensing API*是低能耗的訪問接口。自適應(yīng)調(diào)頻的適用情形:當(dāng)SensingAPI返回的傳感數(shù)據(jù)變化量小于一個閾值(Xap1-Thresholdmin)時,自動降低訪問SensingAPI的頻率;當(dāng)Sensing API返回的傳感數(shù)據(jù)變化量大于另一個閾值(Xap1-Thresholdmax)時,自動提升訪問Sensing API的頻率。這些自適應(yīng)調(diào)頻的機制實現(xiàn)在Sensing API*代碼中,因此該機制對于MSA具有透明性;下面B2和B3中都使用類似的代碼封裝機制;[0042]B2.對于連續(xù)性訪問的Sensing API(例如:攝像頭,麥克風(fēng)等),通過由其他低能耗的Sensing API獲得的情景信息進行優(yōu)化。當(dāng)滿足一些預(yù)定義的情景時,可以關(guān)閉攝像頭傳感器,包括:手機處于鎖屏狀態(tài);手機亮度傳感器(brightness sensor)返回的傳感數(shù)據(jù)表明環(huán)境足夠黑暗;用戶處于高速運動狀態(tài);其他適用的情形。對于麥克風(fēng)(聲音傳感器),也用同樣的方法進行能耗優(yōu)化。當(dāng)滿足一些預(yù)定義的情景時,可以動態(tài)降低聲音采樣頻率,例如:檢測到環(huán)境中無聲音;
[0043]B3.對于提供位置信息的Sensing API (即Location API),基于手機的狀態(tài)進行能耗優(yōu)化,并且封裝為低能耗的Sensing API*接口。用于優(yōu)化Location API的手機狀態(tài)信息包括:手機處于室內(nèi)(通過W1-Fi熱點掃描來推斷)時可以關(guān)閉GPS傳感器;手機處于靜止狀態(tài)(可以通過訪問能耗較低的加速度傳感器來獲得)時可以關(guān)閉GPS傳感器;其他可以優(yōu)化的情形;
[0044]C.對于新開發(fā)的移動傳感應(yīng)用程序(MSA),直接使用Sensing API*來訪問傳感器數(shù)據(jù)即可,而對于已有的(或者遺留的)MSA,轉(zhuǎn)至步驟D進行處理;
[0045]D.使用Sensing API*插樁已有的應(yīng)用程序,然后重打包為新的MSA,實現(xiàn)方法為:
[0046]Dl.把Sensing API*編譯為Java類庫,并且轉(zhuǎn)換為Android Dalvik字節(jié)碼文件;
[0047]D2.使用反匯編工具(例如:baksmali)把包含了 Sensing API*的Dalvik字節(jié)碼文件轉(zhuǎn)換為中間表示法(例如:smali格式);
[0048]D3.利用APK (Android應(yīng)用程序包)插樁工具(例如:APKIL)把已有應(yīng)用程序中的 Sensing API 重定向到 Sensing API* 中;
[0049]D4.利用APK重打包工具把經(jīng)過插樁的代碼重打包為新的MSA。
[0050]其中,步驟A中所述的訪問代價模型由功耗開銷和時間開銷組成,分別記為E (Sensing API) T (Sensing API)。E (Sensing API)是訪問傳感器 API 的能耗或者功耗開銷,可用毫焦(mj)或毫瓦(mW)計量,而T (Sensing API)代表訪問傳感器API的時延,可以用毫秒(ms)計量。具體地,可以使用下面的公式計算:
[0051 ] E (Xapi) = (Ptest*Ttest) /Ntest (公式 I)
[0052]T (Xapi) =Ttest/Ntest (公式 2)
[0053]上述公式I和公式2中的Xapi表示訪問傳感器X的Sensing API,是步驟Al中選出的Sensing API集合的成員。Ptest和Ttest表示系統(tǒng)由于運行步驟A3所述的測試程序而增加的系統(tǒng)功耗和總耗時,而Ntest表示時間段Ttest內(nèi)訪問Xapi的總次數(shù)。
[0054]實施例1:
[0055]下面通過一個具體的實施例對本發(fā)明作進一步的闡述。
[0056]本實施例針對的智能手機平臺是Google Nexus S,運行Android2.3.6操作系統(tǒng)。在訪問代價模型的測量過程中,使用外置的Power Monitor電表設(shè)備實時地監(jiān)測手機的電流和功耗。測試過程中,手機使用外部供電,電壓恒定為3.7V,屏幕保持常亮且亮度不變,測試某種傳感器時無其他應(yīng)用同時運行,亦無其他傳感器同時開啟。
[0057]Android平臺上獲取傳感信息主要是通過查詢各類內(nèi)置的傳感器和網(wǎng)絡(luò)接口的輸出值和相關(guān)狀態(tài)來實現(xiàn)的。下面列出了 Android平臺中主要的內(nèi)置傳感器和一些網(wǎng)絡(luò)接□。
【權(quán)利要求】
1.一種利用Android系統(tǒng)API的訪問代價模型優(yōu)化移動應(yīng)用程序的方法,其特征是,首先利用功耗測量工具和Sensing API測試程序度量出特定智能手機平臺上MSA訪問Sensing API的訪問代價模型;然后基于該訪問代價模型提供能耗優(yōu)化的訪問接口,記為Sensing API*,使之取代相應(yīng)的Sensing API ;MSA通過Sensing API*訪問傳感數(shù)據(jù)以節(jié)省系統(tǒng)能耗; 其中,Sensing API表示移動操作系統(tǒng)提供的訪問傳感器的應(yīng)用程序編程接口,MSA表示移動傳感應(yīng)用程序;所述訪問代價模型包括功耗開銷和時間開銷。
2.如權(quán)利要求1所述的優(yōu)化移動應(yīng)用程序的方法,其特征是,獲取訪問代價模型的方法為: Al.選定所述手機平臺上的SensingAPI集合; A2.針對選定的Sensing API集合,編寫測試程序,該測試程序能夠周期性頻繁地訪問指定的API,并且能夠測量訪問指定API的時延; A3.在所述手機平臺上運行上述測試程序,由測試程序記錄訪問每個Sensing API的時延,并且使用Power Monitor等外置功耗測量工具實時測量訪問指定API的系統(tǒng)功耗; A4.利用步驟A3中獲得的時延數(shù)據(jù)和功耗數(shù)據(jù),獲得該平臺上Sensing API的訪問代價模型。
3.如權(quán)利要求2所述的優(yōu)化移動應(yīng)用程序的方法,其特征是,所述的訪問代價模型由功耗開銷和時間開銷組成,分別記為E(Sensing API) T(Sensing API) ;E(Sensing API)是訪問傳感器API的能耗或者功耗開銷,T (Sensing API)代表訪問傳感器API的時延;使用下面的公式計算:
E (Xapi) = (Ptest*Ttest) /Ntest
T (Xapi) =Ttest/Ntest 其中,XaPi表示訪問傳感器X的Sensing API,是步驟Al中選出的Sensing API集合的成員;Ptest和Ttest表示系統(tǒng)由于運行步驟A3所述的測試程序而增加的系統(tǒng)功耗和總耗時;Ntest表示時間段Ttest內(nèi)訪問Xapi的總次數(shù)。
4.如權(quán)利要求1所述的優(yōu)化移動應(yīng)用程序的方法,其特征是,所述能耗優(yōu)化的訪問接口 Sensing API*的實現(xiàn)方法為: B1.對于周期性訪問的Sensing API,通過自適應(yīng)調(diào)頻的方式來動態(tài)地調(diào)節(jié)訪問API的頻率,編寫代碼把系統(tǒng)提供的Sensing API封裝為經(jīng)過能耗優(yōu)化的Sensing API*,二者在接口和語義上保持一致,區(qū)別之處在于Sensing API*是低能耗的訪問接口 ; B2.對于連續(xù)性訪問的Sensing API,通過由其他低能耗的Sensing API獲得的情景信息進行優(yōu)化,包括: 以下情況時關(guān)閉攝像頭傳感器和聲音傳感器:手機處于鎖屏狀態(tài);手機亮度傳感器返回的傳感數(shù)據(jù)表明環(huán)境足夠黑暗;用戶處于高速運動狀態(tài); 當(dāng)檢測到環(huán)境中無聲音時動態(tài)降低聲音采樣頻率; B3.對于提供位置信息的Sensing API,基于手機的狀態(tài)信息進行能耗優(yōu)化,并且封裝為低能耗的Sensing API*接口 ;包括:手機處于室內(nèi)時關(guān)閉GPS傳感器;手機處于靜止狀態(tài)時可以關(guān)閉GPS傳感器。
5.如權(quán)利要求1所述的優(yōu)化移動應(yīng)用程序的方法,其特征是,對于新開發(fā)的MSA,直接使用Sensing API*來訪問傳感器數(shù)據(jù);而對于已有的MSA,則通過代碼插樁的方式用Sensing API*替換原有系統(tǒng)提供的Sensing API,然后利用應(yīng)用程序重打包技術(shù)發(fā)布經(jīng)過插樁的應(yīng)用程序。
6.如權(quán)利要求4所述的優(yōu)化移動應(yīng)用程序的方法,其特征是,所述自適應(yīng)調(diào)頻的適用情形為:當(dāng)Sensing API返回的傳感數(shù)據(jù)變化量小于一個閾值Xap1-Thresholdmin時,自動降低訪問Sensing API的頻率;當(dāng)Sensing API返回的傳感數(shù)據(jù)變化量大于另一個閾值Xap1-Thresholdmax時,自動提升訪問Sensing API的頻率;這些自適應(yīng)調(diào)頻的機制實現(xiàn)在Sensing API*代碼中,因此該機制對于MSA具有透明性。
7.如權(quán)利要求5所述的優(yōu)化移動應(yīng)用程序的方法,其特征是,對于已有的MSA,執(zhí)行如下操作: Dl.把Sensing API*編譯為Java類庫,并且轉(zhuǎn)換為Android Dalvik字節(jié)碼文件; D2.使用反匯編工具把包含了 Sensing API*的Dalvik字節(jié)碼文件轉(zhuǎn)換為中間表示法; D3.利用APK插樁工具把已有應(yīng)用程序中的Sensing API重定向到Sensing API*中; D4.利用APK重打包工具把經(jīng)過插樁的代碼重打包為新的MSA。
【文檔編號】G06F9/44GK103473069SQ201310438783
【公開日】2013年12月25日 申請日期:2013年9月24日 優(yōu)先權(quán)日:2013年9月24日
【發(fā)明者】郭耀, 孔俊俊, 諶國風(fēng), 陳向群 申請人:北京大學(xué)