利用Android系统API的访问代价模型优化移动应用程序的方法

文档序号:6512926阅读:227来源:国知局
利用Android系统API的访问代价模型优化移动应用程序的方法
【专利摘要】一种利用Android系统API的访问代价模型优化移动应用程序的方法。首先利用功耗测量工具和Sensing?API测试程序度量出特定智能手机平台上MSA访问Sensing?API的访问代价模型;然后基于该访问代价模型提供能耗优化的访问接口,记为Sensing?API*,使之取代相应的Sensing?API;MSA通过Sensing?API*访问传感数据以节省系统能耗。通过本发明所提供的基于Android系统API的访问代价模型优化移动应用程序的方法,可以有效地降低移动传感应用程序的能耗开销;同时,通过代码插桩实现的Sensing?API重定向机制使得本发明提出的方法具有更加广泛的适用性。
【专利说明】利用Android系统API的访问代价模型优化移动应用程序的方法
【技术领域】
[0001]本发明提供了一种优化移动应用程序的方法,具体涉及一种利用Android系统API的访问代价模型优化移动应用程序的方法,属于移动计算领域。
【背景技术】
[0002]智能手机促进了移动传感技术的发展和应用。智能手机一般内嵌了丰富的传感器,包括加速度传感器、螺旋仪、距离传感器、GPS、摄像头、麦克风等。移动应用程序可以借助这些传感器确定用户的状态、位置和环境信息等,从而增强用户体验,例如:地图、导航应用和社交网络移动应用需要感知用户的位置信息,计步器需要感知用户的移动状态。这类移动传感应用程序通常使用移动操作系统(如:Android, iOS, Windows Phone等)提供的传感器访问接口获取传感数据。对于来自Google Play官方市场的I万多个流行应用程序进行分析发现:超过55%的移动应用程序是移动传感应用程序。
[0003]但是,移动传感,尤其是连续性的移动传感,会显著地增加系统能耗。 文 献(A Survey of Mobile Phone Sensing.1EEE CommunicationsMagazine, 2010, 48(9): 140 - 150.)给出的研究数据表明:连续性移动传感应用程序会导致手机待机时间(standby time)从20个小时左右下降到6个小时。一方面,移动传感应用程序获取传感信息时需要访问传感器硬件;而使用这些硬件传感部件会导致手机功耗增加,特别是有些传感器硬件的功耗非常高,例如:摄像头和GPS等。另一方面,部分移动传感应用程序需要持续性频繁地访问传感器,从而导致高能耗。
[0004]针对移动传感应用程序的高能耗问题,已经有一些能耗优化的技术,主要对特定应用程序使用传感器访问接口的行为进行改善以求降低能耗,例如:通过调节调用传感器访问接口的频率或者缓存最新的传感数据并且在短期内复用,减少对传感器部件的直接访问。已有的这类工作在度量智能手机传感信息获取代价时一般仅考虑功耗开销,而未考虑时间开销。此外,这些技术需要针对移动应用本身进行优化,难以适用于已有的众多移动传感应用程序。

【发明内容】

[0005]为了便于表述,本文约定:Sensing API是移动操作系统提供的传感API(访问传感器的应用程序编程接口,API表示应用程序编程接口);MSA表示移动传感应用程序(MobileSensing Applications),即使用了 Sensing API获取传感器数据的移动应用程序。
[0006]本发明的目的是提供一种利用Android系统API的访问代价模型优化移动应用程序的方法,用以解决移动传感应用程序的高能耗问题。
[0007]本发明提供的技术方案如下:
[0008]—种利用Android系统API的访问代价模型优化移动应用程序的方法,其特征是,首先利用功耗测量工具和Sensing API测试程序度量出特定智能手机平台上MSA访问Sensing API的访问代价模型;然后基于该访问代价模型提供能耗优化的访问接口,记为Sensing API*,使之取代相应的Sensing API ;MSA通过Sensing API*访问传感数据以节省系统能耗;
[0009]其中,Sensing API表示移动操作系统提供的访问传感器的应用程序编程接口,MSA表示移动传感应用程序;所述访问代价模型包括功耗开销和时间开销。
[0010]所述的优化移动应用程序的方法,其特征是,获取访问代价模型的方法为:
[0011]Al.选定所述手机平台上的SensingAPI集合;
[0012]A2.针对选定的Sensing API集合,编写测试程序,该测试程序能够周期性频繁地访问指定的API,并且能够测量访问指定API的时延;
[0013]A3.在所述手机平台上运行上述测试程序,由测试程序记录访问每个Sensing API的时延,并且使用Power Monitor等外置功耗测量工具实时测量访问指定API的系统功耗;
[0014]A4.利用步骤A3中获得的时延数据和功耗数据,获得该平台上Sensing API的访问代价模型。
[0015]所述的优化移动应用程序的方法,其特征是,所述的访问代价模型由功耗开销和时间开销组成,分别记为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表示系统由于运行步骤A3所述的测试程序而增加的系统功耗和总耗时;Ntest表示时间段Ttest内访问Xapi的总次数。
[0019]所述的优化移动应用程序的方法,其特征是,所述能耗优化的访问接口 SensingAPI*的实现方法为:
[0020]B1.对于周期性访问的Sensing API,通过自适应调频的方式来动态地调节访问API的频率,编写代码把系统提供的Sensing API封装为经过能耗优化的Sensing API*,二者在接口和语义上保持一致,区别之处在于Sensing API*是低能耗的访问接口 ;
[0021]B2.对于连续性访问的Sensing API,通过由其他低能耗的Sensing API获得的情景信息进行优化,包括:
[0022]以下情况时关闭摄像头传感器和声音传感器:手机处于锁屏状态;手机亮度传感器返回的传感数据表明环境足够黑暗;用户处于高速运动状态;
[0023]当检测到环境中无声音时动态降低声音采样频率;
[0024]B3.对于提供位置信息的Sensing API,基于手机的状态信息进行能耗优化,并且封装为低能耗的Sensing API*接口 ;包括:手机处于室内时关闭GPS传感器;手机处于静止状态时可以关闭GPS传感器。
[0025]所述的优化移动应用程序的方法,其特征是,对于新开发的MSA,直接使用SensingAPI*来访问传感器数据;而对于已有的MSA,则通过代码插桩的方式用Sensing API*替换原有系统提供的Sensing API,然后利用应用程序重打包技术发布经过插桩的应用程序。
[0026]所述的优化移动应用程序的方法,其特征是,所述自适应调频的适用情形为:当Sensing API返回的传感数据变化量小于一个阈值Xap1-Thresholdmin时,自动降低访问Sensing API的频率;当Sensing API返回的传感数据变化量大于另一个阈值Xap1-Thresholdmax时,自动提升访问Sensing API的频率;这些自适应调频的机制实现在Sensing API*代码中,因此该机制对于MSA具有透明性。
[0027]所述的优化移动应用程序的方法,其特征是,对于已有的MSA,执行如下操作:
[0028]Dl.把Sensing API*编译为Java类库,并且转换为Android Dalvik字节码文件;
[0029]D2.使用反汇编工具把包含了 Sensing API*的Dalvik字节码文件转换为中间表示法;
[0030]D3.利用APK插桩工具把已有应用程序中的Sensing API重定向到Sensing API*中;
[0031]D4.利用APK重打包工具把经过插桩的代码重打包为新的MSA。
[0032]本发明的有益效果:通过本发明所提供的基于Android系统API的访问代价模型优化移动应用程序的方法,可以有效地降低移动传感应用程序的能耗开销;同时,通过代码插桩实现的SensingAPI重定向机制使得本发明提出的方法具有更加广泛的适用性。
【专利附图】

【附图说明】
[0033]图1是本发明的流程图。
【具体实施方式】
[0034]本发明的实施方式如下:
[0035]A.获取特定Android手机平台中Sensing API的访问代价模型,实现方法为:
[0036]Al.选定该手机平台上的SensingAPI集合(即一组用于收集传感器数据的系统API);
[0037]A2.针对选定的Sensing API集合,编写测试程序,该测试程序能够周期性频繁地访问指定的API,并且能够测量访问指定API的时延;
[0038]A3.在该手机平台上运行上述测试程序,由测试程序记录访问每个Sensing API的时延,并且使用Power Monitor等外置功耗测量工具实时测量访问指定API的系统功耗;
[0039]A4.利用步骤A3中获得的时延数据和功耗数据,获得该平台上Sensing API的访问代价模型;
[0040]B.基于步骤A所获得的访问代价模型,编写代码实现经过能耗优化的访问接口(即Sensing API*),实现方法为:
[0041]B1.对于周期性访问的Sensing API (例如:螺旋仪、加速度传感器、磁场强度传感器等),通过自适应调频的方式来动态地调节访问API的频率,编写代码把系统提供的Sensing API封装为经过优化的Sensing API*。二者从接口上保持一致,语义也保持一致,区别之处在于Sensing API*是低能耗的访问接口。自适应调频的适用情形:当SensingAPI返回的传感数据变化量小于一个阈值(Xap1-Thresholdmin)时,自动降低访问SensingAPI的频率;当Sensing API返回的传感数据变化量大于另一个阈值(Xap1-Thresholdmax)时,自动提升访问Sensing API的频率。这些自适应调频的机制实现在Sensing API*代码中,因此该机制对于MSA具有透明性;下面B2和B3中都使用类似的代码封装机制;[0042]B2.对于连续性访问的Sensing API(例如:摄像头,麦克风等),通过由其他低能耗的Sensing API获得的情景信息进行优化。当满足一些预定义的情景时,可以关闭摄像头传感器,包括:手机处于锁屏状态;手机亮度传感器(brightness sensor)返回的传感数据表明环境足够黑暗;用户处于高速运动状态;其他适用的情形。对于麦克风(声音传感器),也用同样的方法进行能耗优化。当满足一些预定义的情景时,可以动态降低声音采样频率,例如:检测到环境中无声音;
[0043]B3.对于提供位置信息的Sensing API (即Location API),基于手机的状态进行能耗优化,并且封装为低能耗的Sensing API*接口。用于优化Location API的手机状态信息包括:手机处于室内(通过W1-Fi热点扫描来推断)时可以关闭GPS传感器;手机处于静止状态(可以通过访问能耗较低的加速度传感器来获得)时可以关闭GPS传感器;其他可以优化的情形;
[0044]C.对于新开发的移动传感应用程序(MSA),直接使用Sensing API*来访问传感器数据即可,而对于已有的(或者遗留的)MSA,转至步骤D进行处理;
[0045]D.使用Sensing API*插桩已有的应用程序,然后重打包为新的MSA,实现方法为:
[0046]Dl.把Sensing API*编译为Java类库,并且转换为Android Dalvik字节码文件;
[0047]D2.使用反汇编工具(例如:baksmali)把包含了 Sensing API*的Dalvik字节码文件转换为中间表示法(例如:smali格式);
[0048]D3.利用APK (Android应用程序包)插桩工具(例如:APKIL)把已有应用程序中的 Sensing API 重定向到 Sensing API* 中;
[0049]D4.利用APK重打包工具把经过插桩的代码重打包为新的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表示系统由于运行步骤A3所述的测试程序而增加的系统功耗和总耗时,而Ntest表示时间段Ttest内访问Xapi的总次数。
[0054]实施例1:
[0055]下面通过一个具体的实施例对本发明作进一步的阐述。
[0056]本实施例针对的智能手机平台是Google Nexus S,运行Android2.3.6操作系统。在访问代价模型的测量过程中,使用外置的Power Monitor电表设备实时地监测手机的电流和功耗。测试过程中,手机使用外部供电,电压恒定为3.7V,屏幕保持常亮且亮度不变,测试某种传感器时无其他应用同时运行,亦无其他传感器同时开启。
[0057]Android平台上获取传感信息主要是通过查询各类内置的传感器和网络接口的输出值和相关状态来实现的。下面列出了 Android平台中主要的内置传感器和一些网络接□。
【权利要求】
1.一种利用Android系统API的访问代价模型优化移动应用程序的方法,其特征是,首先利用功耗测量工具和Sensing API测试程序度量出特定智能手机平台上MSA访问Sensing API的访问代价模型;然后基于该访问代价模型提供能耗优化的访问接口,记为Sensing API*,使之取代相应的Sensing API ;MSA通过Sensing API*访问传感数据以节省系统能耗; 其中,Sensing API表示移动操作系统提供的访问传感器的应用程序编程接口,MSA表示移动传感应用程序;所述访问代价模型包括功耗开销和时间开销。
2.如权利要求1所述的优化移动应用程序的方法,其特征是,获取访问代价模型的方法为: Al.选定所述手机平台上的SensingAPI集合; A2.针对选定的Sensing API集合,编写测试程序,该测试程序能够周期性频繁地访问指定的API,并且能够测量访问指定API的时延; A3.在所述手机平台上运行上述测试程序,由测试程序记录访问每个Sensing API的时延,并且使用Power Monitor等外置功耗测量工具实时测量访问指定API的系统功耗; A4.利用步骤A3中获得的时延数据和功耗数据,获得该平台上Sensing API的访问代价模型。
3.如权利要求2所述的优化移动应用程序的方法,其特征是,所述的访问代价模型由功耗开销和时间开销组成,分别记为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表示系统由于运行步骤A3所述的测试程序而增加的系统功耗和总耗时;Ntest表示时间段Ttest内访问Xapi的总次数。
4.如权利要求1所述的优化移动应用程序的方法,其特征是,所述能耗优化的访问接口 Sensing API*的实现方法为: B1.对于周期性访问的Sensing API,通过自适应调频的方式来动态地调节访问API的频率,编写代码把系统提供的Sensing API封装为经过能耗优化的Sensing API*,二者在接口和语义上保持一致,区别之处在于Sensing API*是低能耗的访问接口 ; B2.对于连续性访问的Sensing API,通过由其他低能耗的Sensing API获得的情景信息进行优化,包括: 以下情况时关闭摄像头传感器和声音传感器:手机处于锁屏状态;手机亮度传感器返回的传感数据表明环境足够黑暗;用户处于高速运动状态; 当检测到环境中无声音时动态降低声音采样频率; B3.对于提供位置信息的Sensing API,基于手机的状态信息进行能耗优化,并且封装为低能耗的Sensing API*接口 ;包括:手机处于室内时关闭GPS传感器;手机处于静止状态时可以关闭GPS传感器。
5.如权利要求1所述的优化移动应用程序的方法,其特征是,对于新开发的MSA,直接使用Sensing API*来访问传感器数据;而对于已有的MSA,则通过代码插桩的方式用Sensing API*替换原有系统提供的Sensing API,然后利用应用程序重打包技术发布经过插桩的应用程序。
6.如权利要求4所述的优化移动应用程序的方法,其特征是,所述自适应调频的适用情形为:当Sensing API返回的传感数据变化量小于一个阈值Xap1-Thresholdmin时,自动降低访问Sensing API的频率;当Sensing API返回的传感数据变化量大于另一个阈值Xap1-Thresholdmax时,自动提升访问Sensing API的频率;这些自适应调频的机制实现在Sensing API*代码中,因此该机制对于MSA具有透明性。
7.如权利要求5所述的优化移动应用程序的方法,其特征是,对于已有的MSA,执行如下操作: Dl.把Sensing API*编译为Java类库,并且转换为Android Dalvik字节码文件; D2.使用反汇编工具把包含了 Sensing API*的Dalvik字节码文件转换为中间表示法; D3.利用APK插桩工具把已有应用程序中的Sensing API重定向到Sensing API*中; D4.利用APK重打包工具把经过插桩的代码重打包为新的MSA。
【文档编号】G06F9/44GK103473069SQ201310438783
【公开日】2013年12月25日 申请日期:2013年9月24日 优先权日:2013年9月24日
【发明者】郭耀, 孔俊俊, 谌国风, 陈向群 申请人:北京大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1