APP下载

移动智能终端温度的检测方法

2017-05-02解谦张睿徐永太张沛

移动通信 2017年7期

解谦++张睿++徐永太++张沛

【摘 要】移动智能终端发展迅速,在配置与处理速度不断加快的同时,发热问题也越来越严重,因此针对基于Android智能操作系统的智能终端,提出了一种利用移动智能终端内置传感器检测终端工作时温度表现的测试方法,并阐述了该方法的总体构架、温度获取方法、结果分析以及温度预警等内容。

【关键词】移动智能终端 温度检测 内置传感器

1 引言

移动智能终端发展迅速,从早期的单核处理到现在的多核处理器,移动智能终端拥有了更高的主频、更快的处理速度、更薄的机身等,与此同时其发热问题也越来越被人们所关注。

在电子元件行业有著名的10℃法则,电子元件工作温度每升高10℃,其使用寿命约减少一半,且故障发生率相应提高约一倍[1]。造成移动智能终端温度过高的原因多种多样,除了为追求更小的机身体积造成PCB板面积过小,无更高效的散热手段外,在终端上执行过多的应用造成各部件长时间高负荷的运行也是主要原因。目前智能终端可以安装和运行不同应用(APP),这些应用在使用智能终端硬件資源的使用,以及执行效率等方面各有不同,所以在运行过程中的发热情况也有较大差异。

当移动智能终端发热过高时,首先会严重影响到用户携带和持握终端时的感受,尤其在夏季,当终端温度到达40℃或更高的时候,用户会感觉终端烫手,难以长时间使用。其次移动智能终端的温度能从侧面反映终端的工作情况,由于移动智能终端在设计时会重点考虑其便携性,在现有技术的限制下,电池容量有限,过高的温度代表过高的电量损耗,将急剧缩短移动终端的续航时间。最后当温度过高时,还可能引发电池等部件的爆炸事故。因此检测智能终端在工作时的升温情况是十分必要的。

移动智能终端工作时的温度检测可以在终端处于不同的工作状态下进行检测,检测的方式可以通过两种不同的途径实现。第一种可以通过终端内置传感器对温度进行检测,第二种通过外部设备对终端温度进行检测。本文重点给出以通过终端内置传感器方式检测移动智能终端温度的方案,主要针对基于Android智能操作系统的智能终端。

2 移动智能终端温度检测方法

2.1 总体构架

移动智能终端内置有多种温度传感器,这些传感器都可以通过终端软件内置接口获取温度信息,从而通过软件方式实现移动智能终端工作时的温度检测。

测量移动智能终端的温度,首先需要使终端进入工作状态,在终端工作的同时测量温度、监控升温情况,测试结束后需要对结果进行分析处理,并将结果存入数据库。移动智能终端温度检测总体架构主要包括启动模块、温度检测服务模块、负载模块、结果反馈模块等,如图1所示:

2.2 启动模块

启动模块用于控制整个温度测试的启动逻辑,主要作用是同步负载和温度检测服务,还可以对检测模式进行选择。

因为智能终端在不同的工作模式下,其温度变化会有差异,所以温度检测方式可以分为不同情况:

(1)待机状态:可以在移动智能终端待机时进行测试,检测待机时温度变化情况。待机状态下,仅需要启动温度检测服务,测量移动智能终端的温度变化情况。

(2)普通工作状态:测量在用户正常使用时移动智能终端的温度变化情况。普通工作状态和待机状态一样,仅需要启动温度检测服务,测量移动智能终端温度变化情况。

(3)高负载工作状态:测量移动智能终端在特定状态下的温度变化情况,通常情况下通过对移动智能终端施加高负载,使其处在高负荷工作状态下测量温度变化情况。在高负载工作状态下测量温度,需要同时启动温度检测服务和测试负载。

2.3 负载模块

负载测试指移动智能终端通过运行一段(一组)程序或者操作,来评测终端相关性能的活动。比较早期的基准测试程序是著名的Whetstone,是在20世纪60年代由英国国家物理实验室(NPL)的科学家詹姆斯·威尔金森(James Hardy Wilkins)组织开发的一个用以测试系统浮点运算能力的基准测试工具。发展到现在,测试使用的负载已经多种多样,测试内容可以基于终端硬件,如CPU、GPU、储存器等;也可以基于应用,如多媒体处理、游戏、功耗等。

最好的基准测试程序是真实的、应用的综合基准测试程序,这是为了模拟实际应用的特征和行为而编写的应用[2]。对于温度测试,需要使移动智能终端处于高负荷工作状态,可以使用3D游戏负载或高清视频负载充分调动终端的CPU、GPU和储存系统等部件。3D游戏负载可以基于OPENGL ES技术,搭建模拟3D场景,通过大量贴图、高质量的渲染及阴影效果进行测试。高清视频负载则可以选择分辨率达到或超过终端屏幕分辨率的视频源进行测试。

2.4 温度检测服务模块

移动智能终端内置有多种传感器,主要包括用于监测CPU温度的热敏传感器,以及内置于电池组的温度传感器。下文以Android系统为例,说明终端温度的获取方法。

(1)CPU温度获取方法

在Android系统中,可以通过Thermal管理获得CPU温度信息。Thermal管理是在Android平台上的一套温度管理构架,能够为终端提供传感器管理、温控管理等一系列功能。Thermal管理构架如图2所示。

其中Thermal管理可以通过CPU内置sensor检控和上报温度信息。

在Linux系统中任何设备的操作都被抽象成文件读写,所以可以通过读取/sys/class/thermal/thermal_zone0/temp获得CPU温度信息[3],其温度获取方法如图3所示。

1)获取温度信息,通过FileInputeStream类从/sys/class/thermal/thermal_zone0/temp位置中获取包含CPU温度信息的字节流。

2)转换温度信息,将获取的温度信息字节流通过InputStreamReader类转换成字符流。

3)构建一个BufferedReader实例,通过ReadLine() 方法将CPU温度信息读出[4]。

(2)电池温度

在Android系统中,电池温度信息由系统广播发布。BatteryManager类通过一个粘性的Intent向系统广播电池和充电方面的所有信息,主要包含信息如表1所示[5]。

获取EXTRA_TEMPERATURE当前电池温度的方法:

1)首先需要在系统中注册一个广播接收器,接收系统中的Intent.ACTION_BATTERY_CHANGED。

2)在截获Intent.ACTION_BATTERY_CHANGED广播后,系统会将电池全部信息放入广播接收器的Intent中,可以通过getIntExtra方法指定EXTRA_TEMPERATURE参数获取电池温度。

(3)后台服务

溫度检测服务可以通过启动模块进行启动。因为它需要在移动智能终端运行测试负载时、或者执行其他操作时同步进行温度检测,所以需要使用后台服务方式实现。

后台服务允许程序在后台执行一些耗时较长的操作,并且不提供用户界面。服务能被其他应用程序的组件启动,即使用户切换到其他的应用时还能保持后台运行。以安卓系统为例,服务分为Started和Bound两种[6]:

1)Started服务通过startService()命令来启动。一旦被启动,服务就能在后台一直运行下去,即使启动它的组件已经被销毁。通常Started的服务是单一操作,并且不会向调用者返会结果。

2)Bound服务通过调用bindService()命令将一个应用程序组件绑定到服务上。Bound服务提供了一个客户端/服务器接口,允许组件与服务进行交互、发送请求、获取结果,甚至可以利用进程间通信(IPC)跨进程执行这些操作。绑定服务的生存期和被绑定的应用程序组件一致。多个组件可以同时与一个服务绑定,不过所有的组件解除绑定后,服务也就会被销毁。

对于移动终端温度检测,Started服务即可实现后台启动温度检测服务。温度检测服务可以每隔一段时间间隔Δt来读取一次CPU和电池温度,并将结果按对应的时间节点,以及此时各进程对CPU的占用情况进行记录。记录进程对CPU的占用情况对终端的温度检测是十分有必要的。

启动温度检测服务时还需要注意以下几点:

1)当执行高负载工作状态测试时,为获取到完成的温度信息,需要在启动负载前先通过startService()命令启动温度检测服务。

2)温度检测服务需要创建一个单独的线程进行工作,以避免阻塞主线程。

3)温度检测服务能实时读取移动智能终端CPU和电池温度信息,在工作同时也消耗系统资源,而且移动智能终端温度的改变相对来说是一个相对平缓的过程,所以需要慢速读取,如500 ms。

4)在待机和普通工作状态下,可以设置专门的按钮结束测试并终止温度检测服务,并将结果回传给温度检测应用程序。如果在高负载工作状态下,则可以在负载工作完成时终止测试并终止温度检测服务。

2.5 温度检测结果

在终端运行温度检测服务一段时间后,可以得到该时间段终端的温度表现,包括CPU温度和电池温度等。对于温度结果信息可以进行数据分析工作,如测量温度检测过程中终端的最高温度和最低温度,计算温度检测过程中终端的平均温度表现。将温度检测结果绘制成曲线图方式也能够很好地判断终端温度变化趋势[7]。

2.6 温升预测及预警

在获取温度信息后,不仅能够对移动智能终端的温度情况进行监控,还能做出报警和预警处理。

报警处理是提前设置移动智能终端允许达到的最高温度,当移动智能终端当前监测到的温度超过设置的最高门限值时,通过一定的方式告知终端用户移动智能终端温度过高。为保护手机和电池性能,由中国质量技术监督局发布的GB/T 18287-2013《蜂窝电话用锂离子电池总规范》中规定手机电池最高工作温度为5℃[8]。

预警处理是通过历史温度信息分析每个应用(进程)的温度表现情况,预测在移动智能终端当前工作条件下未来可能达到的温度。这样可以通过预警处理,在终端温度未达到报警门限值前,提前告知用户潜在的温升风险,用户可以提前进行相应的处理。由于移动智能终端是工作在一个复杂的条件下,所以对温度的预警处理应当是一个动态的过程,实时通过终端的温度信息进行调整。温度预警处理可以通过以下方式进行:

(1)相对于温度检测的服务,温度预警的处理在时间要求上更为宽松,可以设置Δt为10 s或更高的时间间隔进行数据采集和预警计算,这是因为:1)温度预警的目的是为了提前通知用户潜在的升温风险,让用户能提前对智能终端的工作情况进行干预,相对高的提前量能让用户有充裕时间进行操作;2)相比温度检测服务,温度预警在计算处理上更为复杂,拉长处理间隔、降低处理频率也有利于降低系统负载,不产生多余热量。

(2)在每一个预警处理时间点tn获取当前使用CPU的各个应用(进程)的升温表现情况Kn,如公式(1)所示:

= (1)

其中,Ki为终端在时间ti到时间ti-1时终端的温升的1%,如公式(2)所示:

Ki=(Tempi-Tempi-1)×1% (2)

每个进程单独统计自身进程的,在当前时间节点该进程工作时,将Ki纳入该进程的计算。

(3)在时间节点tn在获取当前温度并计算每个当前工作进程的升温表现后,进行下一个时间节点tn-1整个终端的温度的预测,下一个时间节点的终端温度为当前终端温度与当前所有进程产生的温升之和,如公式(3)所示:

Tempi+1=Tempi+(P1+P2P3+…Pn) (3)

其中Pn为当前运行的第n个进程的温升,如公式(4)所示:

per (4)

per为当前进程对CPU的使用率,在获取终端温度信息同时,可以通过进程的PID获取[9],如adb的top命令。

(4)当Tempi+1超过设定的报警阈值后,终端可以向用户进行报警。告知方式可以是UI的界面提醒,也可以通过响铃或震动等方式提示用户。检测工具原型如图4所示。

图4 检测工具原型

3 结束语

除了本文提到的可以通过终端内置传感器方式检测终端温度外,还可以通过外部设备对終端温度进行检测。

外部设备对终端温度检测方法通常为:在温箱环境或外部环境中,通过支架固定智能终端,并采用红外成像仪、热偶等外置温度检测工具[10],在固定的距离上对智能终端的发热情况进行检测和记录。测试过程中需要人工开启并设置温箱温度、开启温度检测工具,并对智能终端特定的操作进行检测。在较为复杂的测试条件下,可能还会添加机器人手臂、摄像仪器等设备对智能终端进行操作。测试结束后,通过读取外置温度检测工具的读数,生成终端温度检测结果或报告。

相对于外部设备检测方法,通过内置传感器检测方式不需要昂贵的专业检测设备和场地,也不需要具备相关技术背景的专门技术人员进行检测。它通过软件方式实现,成本低廉、操作简单,一般用户就可以自行对终端温度进行检测。但同时由于温度检测服务需要运行在终端内部,本身也产生一定的热量,这对检测结果会产生一定影响。

移动终端温度检测方法不仅用于对终端温度的检测和预警,终端开发者可以基于本文阐述的方法,根据需求开发更多其他基于终端温度的应用。

参考文献:

[1] 张学新. 某地面电子设备的热设计[J]. 电子机械工程, 2014,30(4): 8-11.

[2] John L Hennesy, David A Patterson. 计算机系统结构-量化研究方法[M]. 4版. 北京: 电子工业出版社, 2007.

[3] 徐凯. 获取CPU温度[EB/OL]. (2014-08-02). http://blog.csdn.net/xukai871105/article/details/38349209.

[4] zzzmmmkkk. Java中BufferedReader & InputStream-Reader用法[EB/OL]. (2012-04-14). http://www.51testing.com/html/85/258885-811659.html.

[5] 杰瑞教育. Android之PowerManager&BatteryManager

[EB/OL]. (2015-10-14). http://www.cnblogs.com/jerehedu/

p/4876842.html.

[6] scott2017. Android Service最全面的解析[EB/OL]. (2016-05-26). http://blog.csdn.net/scott2017/article/details/51505801.

[7] 陈鹏. 基于 Android 应用的性能监控系统的研究与实现[D]. 广州: 华南理工大学, 2015.

[8] GB/T 18287-2013. 蜂窝电话用锂离子电池总规范[S]. 2000.

[9] 红黑联盟. Android获取应用cpu使用率[EB/OL]. (2014-03-15). http://www.2cto.com/kf/201403/285597.html.

[10] 宁培一. 手机安全测试中的温升要求及试验简介[J]. 中国无线电, 2010(5): 78. ★