解謙++張睿++徐永太++張沛
【摘 要】移動智能終端發(fā)展迅速,在配置與處理速度不斷加快的同時,發(fā)熱問題也越來越嚴(yán)重,因此針對基于Android智能操作系統(tǒng)的智能終端,提出了一種利用移動智能終端內(nèi)置傳感器檢測終端工作時溫度表現(xiàn)的測試方法,并闡述了該方法的總體構(gòu)架、溫度獲取方法、結(jié)果分析以及溫度預(yù)警等內(nèi)容。
【關(guān)鍵詞】移動智能終端 溫度檢測 內(nèi)置傳感器
1 引言
移動智能終端發(fā)展迅速,從早期的單核處理到現(xiàn)在的多核處理器,移動智能終端擁有了更高的主頻、更快的處理速度、更薄的機(jī)身等,與此同時其發(fā)熱問題也越來越被人們所關(guān)注。
在電子元件行業(yè)有著名的10℃法則,電子元件工作溫度每升高10℃,其使用壽命約減少一半,且故障發(fā)生率相應(yīng)提高約一倍[1]。造成移動智能終端溫度過高的原因多種多樣,除了為追求更小的機(jī)身體積造成PCB板面積過小,無更高效的散熱手段外,在終端上執(zhí)行過多的應(yīng)用造成各部件長時間高負(fù)荷的運(yùn)行也是主要原因。目前智能終端可以安裝和運(yùn)行不同應(yīng)用(APP),這些應(yīng)用在使用智能終端硬件資源的使用,以及執(zhí)行效率等方面各有不同,所以在運(yùn)行過程中的發(fā)熱情況也有較大差異。
當(dāng)移動智能終端發(fā)熱過高時,首先會嚴(yán)重影響到用戶攜帶和持握終端時的感受,尤其在夏季,當(dāng)終端溫度到達(dá)40℃或更高的時候,用戶會感覺終端燙手,難以長時間使用。其次移動智能終端的溫度能從側(cè)面反映終端的工作情況,由于移動智能終端在設(shè)計時會重點(diǎn)考慮其便攜性,在現(xiàn)有技術(shù)的限制下,電池容量有限,過高的溫度代表過高的電量損耗,將急劇縮短移動終端的續(xù)航時間。最后當(dāng)溫度過高時,還可能引發(fā)電池等部件的爆炸事故。因此檢測智能終端在工作時的升溫情況是十分必要的。
移動智能終端工作時的溫度檢測可以在終端處于不同的工作狀態(tài)下進(jìn)行檢測,檢測的方式可以通過兩種不同的途徑實現(xiàn)。第一種可以通過終端內(nèi)置傳感器對溫度進(jìn)行檢測,第二種通過外部設(shè)備對終端溫度進(jìn)行檢測。本文重點(diǎn)給出以通過終端內(nèi)置傳感器方式檢測移動智能終端溫度的方案,主要針對基于Android智能操作系統(tǒng)的智能終端。
2 移動智能終端溫度檢測方法
2.1 總體構(gòu)架
移動智能終端內(nèi)置有多種溫度傳感器,這些傳感器都可以通過終端軟件內(nèi)置接口獲取溫度信息,從而通過軟件方式實現(xiàn)移動智能終端工作時的溫度檢測。
測量移動智能終端的溫度,首先需要使終端進(jìn)入工作狀態(tài),在終端工作的同時測量溫度、監(jiān)控升溫情況,測試結(jié)束后需要對結(jié)果進(jìn)行分析處理,并將結(jié)果存入數(shù)據(jù)庫。移動智能終端溫度檢測總體架構(gòu)主要包括啟動模塊、溫度檢測服務(wù)模塊、負(fù)載模塊、結(jié)果反饋模塊等,如圖1所示:
2.2 啟動模塊
啟動模塊用于控制整個溫度測試的啟動邏輯,主要作用是同步負(fù)載和溫度檢測服務(wù),還可以對檢測模式進(jìn)行選擇。
因為智能終端在不同的工作模式下,其溫度變化會有差異,所以溫度檢測方式可以分為不同情況:
(1)待機(jī)狀態(tài):可以在移動智能終端待機(jī)時進(jìn)行測試,檢測待機(jī)時溫度變化情況。待機(jī)狀態(tài)下,僅需要啟動溫度檢測服務(wù),測量移動智能終端的溫度變化情況。
(2)普通工作狀態(tài):測量在用戶正常使用時移動智能終端的溫度變化情況。普通工作狀態(tài)和待機(jī)狀態(tài)一樣,僅需要啟動溫度檢測服務(wù),測量移動智能終端溫度變化情況。
(3)高負(fù)載工作狀態(tài):測量移動智能終端在特定狀態(tài)下的溫度變化情況,通常情況下通過對移動智能終端施加高負(fù)載,使其處在高負(fù)荷工作狀態(tài)下測量溫度變化情況。在高負(fù)載工作狀態(tài)下測量溫度,需要同時啟動溫度檢測服務(wù)和測試負(fù)載。
2.3 負(fù)載模塊
負(fù)載測試指移動智能終端通過運(yùn)行一段(一組)程序或者操作,來評測終端相關(guān)性能的活動。比較早期的基準(zhǔn)測試程序是著名的Whetstone,是在20世紀(jì)60年代由英國國家物理實驗室(NPL)的科學(xué)家詹姆斯·威爾金森(James Hardy Wilkins)組織開發(fā)的一個用以測試系統(tǒng)浮點(diǎn)運(yùn)算能力的基準(zhǔn)測試工具。發(fā)展到現(xiàn)在,測試使用的負(fù)載已經(jīng)多種多樣,測試內(nèi)容可以基于終端硬件,如CPU、GPU、儲存器等;也可以基于應(yīng)用,如多媒體處理、游戲、功耗等。
最好的基準(zhǔn)測試程序是真實的、應(yīng)用的綜合基準(zhǔn)測試程序,這是為了模擬實際應(yīng)用的特征和行為而編寫的應(yīng)用[2]。對于溫度測試,需要使移動智能終端處于高負(fù)荷工作狀態(tài),可以使用3D游戲負(fù)載或高清視頻負(fù)載充分調(diào)動終端的CPU、GPU和儲存系統(tǒng)等部件。3D游戲負(fù)載可以基于OPENGL ES技術(shù),搭建模擬3D場景,通過大量貼圖、高質(zhì)量的渲染及陰影效果進(jìn)行測試。高清視頻負(fù)載則可以選擇分辨率達(dá)到或超過終端屏幕分辨率的視頻源進(jìn)行測試。
2.4 溫度檢測服務(wù)模塊
移動智能終端內(nèi)置有多種傳感器,主要包括用于監(jiān)測CPU溫度的熱敏傳感器,以及內(nèi)置于電池組的溫度傳感器。下文以Android系統(tǒng)為例,說明終端溫度的獲取方法。
(1)CPU溫度獲取方法
在Android系統(tǒng)中,可以通過Thermal管理獲得CPU溫度信息。Thermal管理是在Android平臺上的一套溫度管理構(gòu)架,能夠為終端提供傳感器管理、溫控管理等一系列功能。Thermal管理構(gòu)架如圖2所示。
其中Thermal管理可以通過CPU內(nèi)置sensor檢控和上報溫度信息。
在Linux系統(tǒng)中任何設(shè)備的操作都被抽象成文件讀寫,所以可以通過讀取/sys/class/thermal/thermal_zone0/temp獲得CPU溫度信息[3],其溫度獲取方法如圖3所示。
1)獲取溫度信息,通過FileInputeStream類從/sys/class/thermal/thermal_zone0/temp位置中獲取包含CPU溫度信息的字節(jié)流。
2)轉(zhuǎn)換溫度信息,將獲取的溫度信息字節(jié)流通過InputStreamReader類轉(zhuǎn)換成字符流。
3)構(gòu)建一個BufferedReader實例,通過ReadLine() 方法將CPU溫度信息讀出[4]。
(2)電池溫度
在Android系統(tǒng)中,電池溫度信息由系統(tǒng)廣播發(fā)布。BatteryManager類通過一個粘性的Intent向系統(tǒng)廣播電池和充電方面的所有信息,主要包含信息如表1所示[5]。
獲取EXTRA_TEMPERATURE當(dāng)前電池溫度的方法:
1)首先需要在系統(tǒng)中注冊一個廣播接收器,接收系統(tǒng)中的Intent.ACTION_BATTERY_CHANGED。
2)在截獲Intent.ACTION_BATTERY_CHANGED廣播后,系統(tǒng)會將電池全部信息放入廣播接收器的Intent中,可以通過getIntExtra方法指定EXTRA_TEMPERATURE參數(shù)獲取電池溫度。
(3)后臺服務(wù)
溫度檢測服務(wù)可以通過啟動模塊進(jìn)行啟動。因為它需要在移動智能終端運(yùn)行測試負(fù)載時、或者執(zhí)行其他操作時同步進(jìn)行溫度檢測,所以需要使用后臺服務(wù)方式實現(xiàn)。
后臺服務(wù)允許程序在后臺執(zhí)行一些耗時較長的操作,并且不提供用戶界面。服務(wù)能被其他應(yīng)用程序的組件啟動,即使用戶切換到其他的應(yīng)用時還能保持后臺運(yùn)行。以安卓系統(tǒng)為例,服務(wù)分為Started和Bound兩種[6]:
1)Started服務(wù)通過startService()命令來啟動。一旦被啟動,服務(wù)就能在后臺一直運(yùn)行下去,即使啟動它的組件已經(jīng)被銷毀。通常Started的服務(wù)是單一操作,并且不會向調(diào)用者返會結(jié)果。
2)Bound服務(wù)通過調(diào)用bindService()命令將一個應(yīng)用程序組件綁定到服務(wù)上。Bound服務(wù)提供了一個客戶端/服務(wù)器接口,允許組件與服務(wù)進(jìn)行交互、發(fā)送請求、獲取結(jié)果,甚至可以利用進(jìn)程間通信(IPC)跨進(jìn)程執(zhí)行這些操作。綁定服務(wù)的生存期和被綁定的應(yīng)用程序組件一致。多個組件可以同時與一個服務(wù)綁定,不過所有的組件解除綁定后,服務(wù)也就會被銷毀。
對于移動終端溫度檢測,Started服務(wù)即可實現(xiàn)后臺啟動溫度檢測服務(wù)。溫度檢測服務(wù)可以每隔一段時間間隔Δt來讀取一次CPU和電池溫度,并將結(jié)果按對應(yīng)的時間節(jié)點(diǎn),以及此時各進(jìn)程對CPU的占用情況進(jìn)行記錄。記錄進(jìn)程對CPU的占用情況對終端的溫度檢測是十分有必要的。
啟動溫度檢測服務(wù)時還需要注意以下幾點(diǎn):
1)當(dāng)執(zhí)行高負(fù)載工作狀態(tài)測試時,為獲取到完成的溫度信息,需要在啟動負(fù)載前先通過startService()命令啟動溫度檢測服務(wù)。
2)溫度檢測服務(wù)需要創(chuàng)建一個單獨(dú)的線程進(jìn)行工作,以避免阻塞主線程。
3)溫度檢測服務(wù)能實時讀取移動智能終端CPU和電池溫度信息,在工作同時也消耗系統(tǒng)資源,而且移動智能終端溫度的改變相對來說是一個相對平緩的過程,所以需要慢速讀取,如500 ms。
4)在待機(jī)和普通工作狀態(tài)下,可以設(shè)置專門的按鈕結(jié)束測試并終止溫度檢測服務(wù),并將結(jié)果回傳給溫度檢測應(yīng)用程序。如果在高負(fù)載工作狀態(tài)下,則可以在負(fù)載工作完成時終止測試并終止溫度檢測服務(wù)。
2.5 溫度檢測結(jié)果
在終端運(yùn)行溫度檢測服務(wù)一段時間后,可以得到該時間段終端的溫度表現(xiàn),包括CPU溫度和電池溫度等。對于溫度結(jié)果信息可以進(jìn)行數(shù)據(jù)分析工作,如測量溫度檢測過程中終端的最高溫度和最低溫度,計算溫度檢測過程中終端的平均溫度表現(xiàn)。將溫度檢測結(jié)果繪制成曲線圖方式也能夠很好地判斷終端溫度變化趨勢[7]。
2.6 溫升預(yù)測及預(yù)警
在獲取溫度信息后,不僅能夠?qū)σ苿又悄芙K端的溫度情況進(jìn)行監(jiān)控,還能做出報警和預(yù)警處理。
報警處理是提前設(shè)置移動智能終端允許達(dá)到的最高溫度,當(dāng)移動智能終端當(dāng)前監(jiān)測到的溫度超過設(shè)置的最高門限值時,通過一定的方式告知終端用戶移動智能終端溫度過高。為保護(hù)手機(jī)和電池性能,由中國質(zhì)量技術(shù)監(jiān)督局發(fā)布的GB/T 18287-2013《蜂窩電話用鋰離子電池總規(guī)范》中規(guī)定手機(jī)電池最高工作溫度為5℃[8]。
預(yù)警處理是通過歷史溫度信息分析每個應(yīng)用(進(jìn)程)的溫度表現(xiàn)情況,預(yù)測在移動智能終端當(dāng)前工作條件下未來可能達(dá)到的溫度。這樣可以通過預(yù)警處理,在終端溫度未達(dá)到報警門限值前,提前告知用戶潛在的溫升風(fēng)險,用戶可以提前進(jìn)行相應(yīng)的處理。由于移動智能終端是工作在一個復(fù)雜的條件下,所以對溫度的預(yù)警處理應(yīng)當(dāng)是一個動態(tài)的過程,實時通過終端的溫度信息進(jìn)行調(diào)整。溫度預(yù)警處理可以通過以下方式進(jìn)行:
(1)相對于溫度檢測的服務(wù),溫度預(yù)警的處理在時間要求上更為寬松,可以設(shè)置Δt為10 s或更高的時間間隔進(jìn)行數(shù)據(jù)采集和預(yù)警計算,這是因為:1)溫度預(yù)警的目的是為了提前通知用戶潛在的升溫風(fēng)險,讓用戶能提前對智能終端的工作情況進(jìn)行干預(yù),相對高的提前量能讓用戶有充裕時間進(jìn)行操作;2)相比溫度檢測服務(wù),溫度預(yù)警在計算處理上更為復(fù)雜,拉長處理間隔、降低處理頻率也有利于降低系統(tǒng)負(fù)載,不產(chǎn)生多余熱量。
(2)在每一個預(yù)警處理時間點(diǎn)tn獲取當(dāng)前使用CPU的各個應(yīng)用(進(jìn)程)的升溫表現(xiàn)情況Kn,如公式(1)所示:
= (1)
其中,Ki為終端在時間ti到時間ti-1時終端的溫升的1%,如公式(2)所示:
Ki=(Tempi-Tempi-1)×1% (2)
每個進(jìn)程單獨(dú)統(tǒng)計自身進(jìn)程的,在當(dāng)前時間節(jié)點(diǎn)該進(jìn)程工作時,將Ki納入該進(jìn)程的計算。
(3)在時間節(jié)點(diǎn)tn在獲取當(dāng)前溫度并計算每個當(dāng)前工作進(jìn)程的升溫表現(xiàn)后,進(jìn)行下一個時間節(jié)點(diǎn)tn-1整個終端的溫度的預(yù)測,下一個時間節(jié)點(diǎn)的終端溫度為當(dāng)前終端溫度與當(dāng)前所有進(jìn)程產(chǎn)生的溫升之和,如公式(3)所示:
Tempi+1=Tempi+(P1+P2P3+…Pn) (3)
其中Pn為當(dāng)前運(yùn)行的第n個進(jìn)程的溫升,如公式(4)所示:
per (4)
per為當(dāng)前進(jìn)程對CPU的使用率,在獲取終端溫度信息同時,可以通過進(jìn)程的PID獲取[9],如adb的top命令。
(4)當(dāng)Tempi+1超過設(shè)定的報警閾值后,終端可以向用戶進(jìn)行報警。告知方式可以是UI的界面提醒,也可以通過響鈴或震動等方式提示用戶。檢測工具原型如圖4所示。
圖4 檢測工具原型
3 結(jié)束語
除了本文提到的可以通過終端內(nèi)置傳感器方式檢測終端溫度外,還可以通過外部設(shè)備對終端溫度進(jìn)行檢測。
外部設(shè)備對終端溫度檢測方法通常為:在溫箱環(huán)境或外部環(huán)境中,通過支架固定智能終端,并采用紅外成像儀、熱偶等外置溫度檢測工具[10],在固定的距離上對智能終端的發(fā)熱情況進(jìn)行檢測和記錄。測試過程中需要人工開啟并設(shè)置溫箱溫度、開啟溫度檢測工具,并對智能終端特定的操作進(jìn)行檢測。在較為復(fù)雜的測試條件下,可能還會添加機(jī)器人手臂、攝像儀器等設(shè)備對智能終端進(jìn)行操作。測試結(jié)束后,通過讀取外置溫度檢測工具的讀數(shù),生成終端溫度檢測結(jié)果或報告。
相對于外部設(shè)備檢測方法,通過內(nèi)置傳感器檢測方式不需要昂貴的專業(yè)檢測設(shè)備和場地,也不需要具備相關(guān)技術(shù)背景的專門技術(shù)人員進(jìn)行檢測。它通過軟件方式實現(xiàn),成本低廉、操作簡單,一般用戶就可以自行對終端溫度進(jìn)行檢測。但同時由于溫度檢測服務(wù)需要運(yùn)行在終端內(nèi)部,本身也產(chǎn)生一定的熱量,這對檢測結(jié)果會產(chǎn)生一定影響。
移動終端溫度檢測方法不僅用于對終端溫度的檢測和預(yù)警,終端開發(fā)者可以基于本文闡述的方法,根據(jù)需求開發(fā)更多其他基于終端溫度的應(yīng)用。
參考文獻(xiàn):
[1] 張學(xué)新. 某地面電子設(shè)備的熱設(shè)計[J]. 電子機(jī)械工程, 2014,30(4): 8-11.
[2] John L Hennesy, David A Patterson. 計算機(jī)系統(tǒng)結(jié)構(gòu)-量化研究方法[M]. 4版. 北京: 電子工業(yè)出版社, 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 應(yīng)用的性能監(jiān)控系統(tǒng)的研究與實現(xiàn)[D]. 廣州: 華南理工大學(xué), 2015.
[8] GB/T 18287-2013. 蜂窩電話用鋰離子電池總規(guī)范[S]. 2000.
[9] 紅黑聯(lián)盟. Android獲取應(yīng)用cpu使用率[EB/OL]. (2014-03-15). http://www.2cto.com/kf/201403/285597.html.
[10] 寧培一. 手機(jī)安全測試中的溫升要求及試驗簡介[J]. 中國無線電, 2010(5): 78. ★