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