專利名稱:Android終端應(yīng)用程序功耗監(jiān)控的方法和裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及到,特別涉及到一種Android終端應(yīng)用程序功耗監(jiān)控的方法和裝置。
背景技術(shù):
功耗一直是智能移動設(shè)備所重點(diǎn)關(guān)心的關(guān)鍵技術(shù)指標(biāo),功耗的好壞直接決定了一款智能移動產(chǎn)品的核心競爭力。功耗的優(yōu)化可以從硬件、驅(qū)動、系統(tǒng)軟件和應(yīng)用程序等方面進(jìn)行。Android終端產(chǎn)品出廠前,設(shè)備制造商會在硬件、驅(qū)動和系統(tǒng)軟件層面對功耗進(jìn)行優(yōu)化,做到性能和功率消耗的最優(yōu)平衡,但對于應(yīng)用程序的功耗無法控制,用戶經(jīng)常發(fā)現(xiàn)Android終端在安裝大量應(yīng)用程序后,待機(jī)時間急劇下降。最新的數(shù)據(jù)顯示Android的免費(fèi)應(yīng)用數(shù)量已經(jīng)達(dá)到13. 4萬。免費(fèi)應(yīng)用程序的增長雖然可以讓用戶的體驗(yàn)得到極大的豐富和擴(kuò)展,但同時,由于某些不被監(jiān)督和管理的免費(fèi)軟件在編程開發(fā)過程中,只考慮其功能而不考慮對軟硬件資源的節(jié)約利用,使得這些免費(fèi)應(yīng)用程序在運(yùn)行時造成用戶的Android終端功耗急劇惡化,比如很多免費(fèi)游戲代碼的執(zhí)行效率很低,用戶在玩這些游戲時,CPU資源長期處于 100%運(yùn)轉(zhuǎn),無法進(jìn)入idle節(jié)能狀態(tài),還有一些軟件為了防止掉線,會長期持有Android系統(tǒng)的睡眠鎖,導(dǎo)致系統(tǒng)無法在系統(tǒng)閑置時進(jìn)入睡眠模式,或者還有一些應(yīng)用程序在用戶并不知情的時候訪問WIFI、BT和3G等無線網(wǎng)絡(luò),使功耗較高的射頻模塊頻繁處于高負(fù)荷狀態(tài),上述各種情況都會急劇惡化Android終端功耗從而縮短整機(jī)的電池待機(jī)時間。
發(fā)明內(nèi)容
本發(fā)明的主要目的為提供一種Android終端應(yīng)用程序功耗監(jiān)控的方法和裝置,解決Android終端由于應(yīng)用程序的行為而增大功耗的問題。本發(fā)明提出一種Android終端應(yīng)用程序功耗監(jiān)控的方法,包括通過預(yù)設(shè)的監(jiān)控點(diǎn)捕獲應(yīng)用程序的行為;收集所述應(yīng)用程序的行為的功耗數(shù)據(jù);根據(jù)所述功耗數(shù)據(jù),分析所述應(yīng)用程序的功耗,并將分析結(jié)果顯示于Android終端。優(yōu)選地,在執(zhí)行所述將分析結(jié)果顯示于Android終端之后,還包括對滿足預(yù)設(shè)的告警規(guī)則的應(yīng)用程序,發(fā)出告警。優(yōu)選地,在執(zhí)行所述通過預(yù)設(shè)的監(jiān)控點(diǎn)捕獲應(yīng)用程序的行為之前,還包括設(shè)置捕獲應(yīng)用程序行為的監(jiān)控點(diǎn)。優(yōu)選地,所述根據(jù)功耗數(shù)據(jù),分析應(yīng)用程序的功耗,包括對所述功耗數(shù)據(jù)進(jìn)行排序和檢索;統(tǒng)計(jì)所述排序和檢索后的功耗數(shù)據(jù)。優(yōu)選地,所述統(tǒng)計(jì)排序和檢索后的功耗數(shù)據(jù)具體為
通過用戶界面接受應(yīng)用程序功耗統(tǒng)計(jì)的設(shè)置;根據(jù)所述設(shè)置進(jìn)行統(tǒng)計(jì)邏輯計(jì)算。本發(fā)明還提出一種Android終端應(yīng)用程序功耗監(jiān)控的裝置,包括捕獲模塊,用于通過預(yù)設(shè)的監(jiān)控點(diǎn)捕獲應(yīng)用程序的行為;收集模塊,用于收集所述應(yīng)用程序的行為的功耗數(shù)據(jù);分析模塊,用于根據(jù)所述功耗數(shù)據(jù),分析所述應(yīng)用程序的功耗,并將分析結(jié)果顯示于Android終端。優(yōu)選地,所述裝置還包括告警模塊,用于對滿足預(yù)設(shè)的告警規(guī)則的應(yīng)用程序,發(fā)出告警。優(yōu)選地,所述裝置還包括設(shè)置模塊,用于設(shè)置捕獲應(yīng)用程序行為的監(jiān)控點(diǎn)。優(yōu)選地,所述分析模塊包括數(shù)據(jù)挖掘單元,用于對所述功耗數(shù)據(jù)進(jìn)行排序和檢索;UI單元,用于統(tǒng)計(jì)所述排序和檢索后的功耗數(shù)據(jù)。優(yōu)選地,所述UI單元包括UI設(shè)置子單元,用于通過用戶界面接受應(yīng)用程序功耗統(tǒng)計(jì)的設(shè)置;統(tǒng)計(jì)子單元,用于根據(jù)所述設(shè)置進(jìn)行統(tǒng)計(jì)邏輯計(jì)算。本發(fā)明提出的一種Android終端應(yīng)用程序功耗監(jiān)控的方法和裝置,通過設(shè)置監(jiān)控點(diǎn),監(jiān)控Android終端內(nèi)應(yīng)用程序的行為,并對監(jiān)控后的數(shù)據(jù)進(jìn)行分析處理,使得因應(yīng)用程序行為而惡化Android終端功耗的問題得到有效控制,提高了用戶體驗(yàn)度。
圖1為本發(fā)明Android終端應(yīng)用程序功耗監(jiān)控的方法的流程示意圖;圖2為本發(fā)明Android終端應(yīng)用程序功耗監(jiān)控的方法中應(yīng)用程序行為捕獲的示意圖;圖3為本發(fā)明Android終端應(yīng)用程序功耗監(jiān)控的方法中數(shù)據(jù)收集服務(wù)的示意圖;圖4為本發(fā)明Android終端應(yīng)用程序功耗監(jiān)控的方法中UI界面的示意圖;圖5為本發(fā)明Android終端應(yīng)用程序功耗監(jiān)控的裝置的結(jié)構(gòu)示意圖;圖6為本發(fā)明Android終端應(yīng)用程序功耗監(jiān)控的裝置中分析模塊的結(jié)構(gòu)示意圖7為本發(fā)明Android終端應(yīng)用程序功耗監(jiān)控的裝置中UI單元的結(jié)構(gòu)示意圖。本發(fā)明目的的實(shí)現(xiàn)、功能特點(diǎn)及優(yōu)點(diǎn)將結(jié)合實(shí)施例,參照附圖做進(jìn)一步說明。
具體實(shí)施例方式應(yīng)當(dāng)理解,此處所描述的具體實(shí)施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。參照圖1,提出本發(fā)明Android終端應(yīng)用程序功耗監(jiān)控的方法一實(shí)施例,包括步驟S101、設(shè)置捕獲應(yīng)用程序行為的監(jiān)控點(diǎn)。監(jiān)控點(diǎn)是對應(yīng)用程序進(jìn)行功耗監(jiān)控的基礎(chǔ)數(shù)據(jù)源,每個監(jiān)控點(diǎn)都需要知道當(dāng)前所監(jiān)控的應(yīng)用程序的行為、PID(進(jìn)程編號)和持續(xù)的時間。監(jiān)控點(diǎn)的類型主要有CPU占用率、不釋放睡眠鎖、電話服務(wù)(手機(jī))、界面置頂、網(wǎng)絡(luò)使用、開屏幕、使用WIFI、使用BT、使用APN和/或使用GPS。由于監(jiān)控點(diǎn)所監(jiān)控的行為都是系統(tǒng)核心的業(yè)務(wù)邏輯,所以需要修改Android系統(tǒng)的framework的代碼來實(shí)現(xiàn)。各個監(jiān)控點(diǎn)可由相關(guān)的研發(fā)人員定義權(quán)重,根據(jù)實(shí)際開發(fā)過程中,各個監(jiān)控點(diǎn)的行為所造成電流的增減情況來決定,例如CPU處于idle (閑置)或100%運(yùn)轉(zhuǎn)一定時間的功耗增加,以及系統(tǒng)長時間不睡眠導(dǎo)致的功耗增加相比,哪一個功耗增加更多,則權(quán)重就更大。步驟S102、通過預(yù)設(shè)的監(jiān)控點(diǎn)捕獲應(yīng)用程序的行為;為了監(jiān)控應(yīng)用程序的各種功率消耗的行為,要針對各種不同的行為在Android系統(tǒng)framework內(nèi)安插一些行為捕捉代碼,如圖2所示,具體監(jiān)控點(diǎn)的作用如下(I)PowerManagerService 可捕獲任何應(yīng)用程序持有和釋放睡眠鎖的時間點(diǎn),是 android系統(tǒng)的電源管理服務(wù),在此處設(shè)置監(jiān)控點(diǎn)可捕獲每個應(yīng)用程序獲得和釋放睡眠鎖的時間。(2)監(jiān)控位于systemserver進(jìn)程的各個關(guān)鍵服務(wù)MediaPlayerService 捕獲播放媒體的行為。WifiService 捕獲打開或關(guān)閉wifi的行為。SettingProvider 捕獲打開或關(guān)閉GPS的行為。ConnectivityService 捕獲APN網(wǎng)絡(luò)連接和斷開的行為。BluetoothService 捕獲BT的打開和關(guān)閉行為。(3)在應(yīng)用程序所使用的基類中加入監(jiān)控。OSNetworkSystem. Java 應(yīng)用程序TCP連接所需要使用的基類,監(jiān)控應(yīng)用的網(wǎng)絡(luò)流量。Activity, java 應(yīng)用程序所有Acitivity界面的基類,可以監(jiān)控應(yīng)用的顯示隱藏,從而可以得到該應(yīng)用的前臺使用頻率。(4)另外的監(jiān)控點(diǎn)可以是Iinux操作系統(tǒng)暴露出來的proc接口 /proC/<pid>/ stat 可以獲取每個應(yīng)用程序?qū)PU的占用時間。步驟S103、收集所述應(yīng)用程序的行為的功耗數(shù)據(jù);數(shù)據(jù)收集服務(wù)和數(shù)據(jù)庫的主要功能是數(shù)據(jù)保存和數(shù)據(jù)挖掘。當(dāng)設(shè)置好監(jiān)控點(diǎn)并獲得所需的關(guān)鍵數(shù)據(jù)后,需要一個統(tǒng)一的數(shù)據(jù)上報接口幫助各個監(jiān)控點(diǎn)將監(jiān)控的數(shù)據(jù)發(fā)送到數(shù)據(jù)收集服務(wù)和數(shù)據(jù)庫中。由于監(jiān)控點(diǎn)的實(shí)現(xiàn)代碼散落在系統(tǒng)的各個角落的java文件中,為了讓所有的數(shù)據(jù)都能訪問數(shù)據(jù)上報接口,需要把數(shù)據(jù)上報接口的java代碼實(shí)現(xiàn)在 framework的源碼中。如圖2所示,pcvalue. java即數(shù)據(jù)上報接口所處的位置,主要實(shí)現(xiàn)如下函數(shù)接口pub lie static boolean Inser tPo werCons ump t ionRec ore d (Context mRemoteContext, String ComponentName, //所監(jiān)控應(yīng)用程序的名稱String PkgName,//所監(jiān)控應(yīng)用的包名int PID, //所監(jiān)控應(yīng)用的PIDint TID,//所監(jiān)控應(yīng)用的TIDlong timeinms, //所監(jiān)控的行為的持續(xù)時間String Action, int args)//所監(jiān)控行為和參數(shù)
數(shù)據(jù)上報接口除了提供一個標(biāo)準(zhǔn)接口連接各個監(jiān)控點(diǎn)和數(shù)據(jù)收集服務(wù),還需要負(fù)責(zé)處理一些對性能的優(yōu)化,典型的需求即把各監(jiān)控點(diǎn)的上報請求放入另一個線程去排隊(duì)執(zhí)行,使得監(jiān)控點(diǎn)的請求立刻返回,以避免對UI的流暢度產(chǎn)生不良影響。為了跨進(jìn)程接收各個監(jiān)控點(diǎn)從各個應(yīng)用程序進(jìn)程中通過數(shù)據(jù)上報接口上報的數(shù)據(jù),數(shù)據(jù)收集服務(wù)可以被設(shè)計(jì)為一個Data Provider,這是android系統(tǒng)的基本功能之一, 一個Data ftxwider可以運(yùn)行在任何一個進(jìn)程,提供一套數(shù)據(jù)訪問接口,其他數(shù)據(jù)訪問的客戶端通過binder機(jī)制實(shí)現(xiàn)對這些接口的跨進(jìn)程訪問。在具體實(shí)施方案中,數(shù)據(jù)收集服務(wù)器設(shè)計(jì)運(yùn)行于system server進(jìn)程,如此在其他普通應(yīng)用中運(yùn)行時該數(shù)據(jù)收集服務(wù)器不會被內(nèi)存管理程序限制。數(shù)據(jù)收集服務(wù)器由如下子模塊組成(a) Data Provider ^ Π Android 白勺 Data Provider ilil —白勺t示}Π 行工作,這些標(biāo)準(zhǔn)接口添加具體的實(shí)現(xiàn)代碼即可工作,其中最主要的是insert接口,其接受從數(shù)據(jù)上報接口傳來的數(shù)據(jù),initialValues中包括應(yīng)用程序的名稱、行為和操作時間等。public Uri insert (Uri uri, ContentValues initialValues)函數(shù)實(shí)現(xiàn)就是要把 initialValues中的數(shù)據(jù)轉(zhuǎn)換為下面所提到的數(shù)據(jù)庫操作的sql指令插入數(shù)據(jù)的相關(guān)表中。(b)數(shù)據(jù)庫=Android系統(tǒng)內(nèi)置的數(shù)據(jù)庫是sqlite,sqlite是一個輕量但功能完善的數(shù)據(jù)庫,支持標(biāo)準(zhǔn)的sql語法,在此用于存儲應(yīng)用程序上報的數(shù)據(jù),該數(shù)據(jù)庫為各個監(jiān)控點(diǎn)建立數(shù)據(jù)表,每個監(jiān)控點(diǎn)上報的數(shù)據(jù)自動進(jìn)入對應(yīng)的數(shù)據(jù)表,便于檢索。整個數(shù)據(jù)庫以 db文件的形式存在,支持備份和離線訪問。(c)備份服務(wù)數(shù)據(jù)庫在每次充放電周期都做一次備份,備份的文件為一個db文件,方便作為歷史記錄查詢。步驟S104、根據(jù)所述功耗數(shù)據(jù),分析所述應(yīng)用程序的功耗,并將分析結(jié)果顯示于 Android 終端;首先進(jìn)行數(shù)據(jù)挖掘。實(shí)現(xiàn)對數(shù)據(jù)進(jìn)行排序和復(fù)雜的檢索的功能,簡化用戶端的數(shù)據(jù)分析的復(fù)雜度。如圖3所示,UI Classes通過DataDigHelper從sqlite數(shù)據(jù)中索引數(shù)據(jù),通過添加各種條件可以按照UI界面的設(shè)置得到各種統(tǒng)計(jì)數(shù)據(jù),比如統(tǒng)計(jì)一段時間內(nèi)功率消耗較大的監(jiān)控點(diǎn)或應(yīng)用程序,實(shí)現(xiàn)計(jì)算邏輯并導(dǎo)出簡單的接口。DataDigHelper實(shí)現(xiàn)了數(shù)據(jù)挖掘功能,挖掘的數(shù)據(jù)封裝在AppUsageinfo類中。其次,UI界面解析數(shù)據(jù)挖掘獲得的數(shù)據(jù)到圖形界面,通過對多次挖掘的數(shù)據(jù)進(jìn)行分析,可以把數(shù)據(jù)很直觀的顯示給用戶。。UI用戶界面提供一個可視化界面,實(shí)現(xiàn)各個應(yīng)用程序功耗的統(tǒng)計(jì)、細(xì)節(jié)分析和告警設(shè)置等功能。為了方便用戶能簡單分析出移動終端功耗的問題,UI用戶界面需要支持方便的檢索視圖,方便用戶從所有程序列表中找到需要強(qiáng)制停止或卸載的程序和服務(wù)。為了能讓用戶在電池消耗完之前及時發(fā)現(xiàn)功耗過大的應(yīng)用程序,此模塊支持用戶的告警設(shè)置,用戶可以設(shè)置當(dāng)某個應(yīng)用程序持續(xù)不釋放鎖超過一段時間后告警,用戶也可以設(shè)置某應(yīng)用程序一段時間內(nèi)總功耗超過一預(yù)設(shè)閥值后告警,上述設(shè)置可以使用戶按照實(shí)際要求過濾一些不太常用卻嚴(yán)重影響功耗的應(yīng)用程序。圖4說明了數(shù)據(jù)統(tǒng)計(jì)的邏輯結(jié)構(gòu),可以從應(yīng)用程序模式和模塊模式多個角度來發(fā)現(xiàn)功率異常的應(yīng)用程序。
步驟S105、對滿足預(yù)設(shè)的告警規(guī)則的應(yīng)用程序,發(fā)出告警。告警系統(tǒng)是一個運(yùn)行于后臺的服務(wù),獨(dú)立于UI界面,監(jiān)視系統(tǒng)的事件和應(yīng)用程序的行為。UI界面用戶可以設(shè)置告警選項(xiàng),后臺的告警服務(wù)器根據(jù)用戶的告警設(shè)置實(shí)時監(jiān)視各個應(yīng)用程序的行為,一旦有超過閥值的行為,發(fā)送警告消息提醒用戶關(guān)閉或卸載相關(guān)的應(yīng)用程序以免電池意外耗光。實(shí)現(xiàn)時,可以將其和數(shù)據(jù)手機(jī)服務(wù)捆綁在一起,也可以獨(dú)立做成一個Android系統(tǒng)的service服務(wù)。其主要提供一個監(jiān)視線程,在線程中判斷用戶通過UI設(shè)置的條件從而實(shí)現(xiàn)對不同狀況的監(jiān)控。當(dāng)發(fā)現(xiàn)異常的行為滿足告警設(shè)置時,可以通過intend的方式將告警信息上報給UI系統(tǒng),UI系統(tǒng)負(fù)責(zé)向用戶以對話框的形式反饋。例如用戶設(shè)置一旦發(fā)現(xiàn)手機(jī)閑置后10分鐘后阻止系統(tǒng)睡眠的應(yīng)用,那么告警系統(tǒng)會時刻監(jiān)視用戶的按鍵、觸屏動作停止和屏幕滅的事件,并在這些行為發(fā)生后10分鐘后觸發(fā)告警程序。又例如用戶設(shè)置了監(jiān)視長期占用CPU比例50%以上的應(yīng)用程序,那么告警系統(tǒng)每一段時間統(tǒng)計(jì)CPU的占用時間,找出占用時間超過50%的應(yīng)用上報給UI界面。本實(shí)施例中,通過設(shè)置監(jiān)控點(diǎn),監(jiān)控Android終端內(nèi)應(yīng)用程序的行為,并對監(jiān)控后的數(shù)據(jù)進(jìn)行分析處理,使得因應(yīng)用程序行為而惡化Android終端功耗的問題得到有效控制,提高了用戶體驗(yàn)度。參照圖5,提出本發(fā)明Android終端應(yīng)用程序功耗監(jiān)控的裝置一實(shí)施例,包括設(shè)置模塊10,用于設(shè)置捕獲應(yīng)用程序行為的監(jiān)控點(diǎn);捕獲模塊20,用于通過預(yù)設(shè)的監(jiān)控點(diǎn)捕獲應(yīng)用程序的行為;收集模塊30,用于收集所述應(yīng)用程序的行為的功耗數(shù)據(jù);分析模塊40,用于根據(jù)所述功耗數(shù)據(jù),分析所述應(yīng)用程序的功耗,并將分析結(jié)果顯示于Android終端;告警模塊50,用于對滿足預(yù)設(shè)的告警規(guī)則的應(yīng)用程序,發(fā)出告警。參照圖6,分析模塊40包括數(shù)據(jù)挖掘單元41,用于對所述功耗數(shù)據(jù)進(jìn)行排序和檢索;UI單元42,用于統(tǒng)計(jì)所述排序和檢索后的功耗數(shù)據(jù)。參照圖7,UI單元42包括UI設(shè)置子單元421,用于通過用戶界面接受應(yīng)用程序功耗統(tǒng)計(jì)的設(shè)置;統(tǒng)計(jì)子單元422,用于根據(jù)所述設(shè)置進(jìn)行統(tǒng)計(jì)邏輯計(jì)算。本實(shí)施例的Android終端應(yīng)用程序功耗監(jiān)控的裝置可以是Android終端,或與 Android終端相連的裝置。設(shè)置模塊10設(shè)置各監(jiān)控點(diǎn),監(jiān)控點(diǎn)是對應(yīng)用程序進(jìn)行功耗監(jiān)控的基礎(chǔ)數(shù)據(jù)源,每個監(jiān)控點(diǎn)都需要知道當(dāng)前所監(jiān)控的應(yīng)用程序的行為、PID(進(jìn)程編號)和持續(xù)的時間。監(jiān)控點(diǎn)的類型主要有CPU占用率、不釋放睡眠鎖、電話服務(wù)(手機(jī))、界面置頂、網(wǎng)絡(luò)使用、開屏幕、使用WIFI、使用BT、使用APN和/或使用GPS。由于監(jiān)控點(diǎn)所監(jiān)控的行為都是系統(tǒng)核心的業(yè)務(wù)邏輯,所以需要修改Android系統(tǒng)的framework的代碼來實(shí)現(xiàn)。設(shè)置模塊10同時接收相關(guān)的研發(fā)人員定義的各個監(jiān)控點(diǎn)的權(quán)重,在實(shí)際開發(fā)過程中,各個監(jiān)控點(diǎn)的行為所造成電流的增減情況不同,例如CPU處于idle (閑置)或100%運(yùn)轉(zhuǎn)一定時間的功耗增加,以及系統(tǒng)長時間不睡眠導(dǎo)致的功耗增加相比,哪一個功耗增加更多,則權(quán)重就更大。捕獲模塊20為了監(jiān)控應(yīng)用程序的各種功率消耗的行為,要針對各種不同的行為在Android系統(tǒng)framework內(nèi)安插一些行為捕捉代碼,如圖2所示,具體監(jiān)控點(diǎn)的作用如下(I)PowerManagerService 可捕獲任何應(yīng)用程序持有和釋放睡眠鎖的時間點(diǎn),是 android系統(tǒng)的電源管理服務(wù),在此處設(shè)置監(jiān)控點(diǎn)可捕獲每個應(yīng)用程序獲得和釋放睡眠鎖的時間。(2)監(jiān)控位于systemserver進(jìn)程的各個關(guān)鍵服務(wù)MediaPlayerService 捕獲播放媒體的行為。WifiService 捕獲打開或關(guān)閉wifi的行為。SettingProvider 捕獲打開或關(guān)閉GPS的行為。ConnectivityService 捕獲APN網(wǎng)絡(luò)連接和斷開的行為。BluetoothService 捕獲BT的打開和關(guān)閉行為。(3)在應(yīng)用程序所使用的基類中加入監(jiān)控。OSNetworkSystem. Java 應(yīng)用程序TCP連接所需要使用的基類,監(jiān)控應(yīng)用的網(wǎng)絡(luò)流量。Activity, java:應(yīng)用程序所有Acitivity界面的基類,可以監(jiān)控應(yīng)用的顯示隱藏,從而可以得到該應(yīng)用的前臺使用頻率。(4)另外的監(jiān)控點(diǎn)可以是Iinux操作系統(tǒng)暴露出來的proc接口 /proC/<pid>/ stat 可以獲取每個應(yīng)用程序?qū)PU的占用時間。收集模塊30進(jìn)行數(shù)據(jù)收集服務(wù),主要功能是數(shù)據(jù)保存和數(shù)據(jù)挖掘。當(dāng)設(shè)置好監(jiān)控點(diǎn)并獲得所需的關(guān)鍵數(shù)據(jù)后,需要一個統(tǒng)一的數(shù)據(jù)上報接口幫助各個監(jiān)控點(diǎn)將監(jiān)控的數(shù)據(jù)發(fā)送到收集模塊30中。由于監(jiān)控點(diǎn)的實(shí)現(xiàn)代碼散落在系統(tǒng)的各個角落的java文件中,為了讓所有的數(shù)據(jù)都能訪問數(shù)據(jù)上報接口,需要把數(shù)據(jù)上報接口的java代碼實(shí)現(xiàn)在framework 的源碼中。如圖2所示,pcvalue. java即數(shù)據(jù)上報接口所處的位置,主要實(shí)現(xiàn)如下函數(shù)接 Π pub lie static boolean Inser tPo werCons ump t ionRe cored (Context mRemoteContext, String ComponentName),// 所監(jiān)控應(yīng)用程序的名稱String PkgName,//所監(jiān)控應(yīng)用的包名int PID,//所監(jiān)控應(yīng)用的PIDint TID, //所監(jiān)控應(yīng)用的TIDlong timeinms,//所監(jiān)控的行為的持續(xù)時間String Action, int args)//所監(jiān)控行為和參數(shù)數(shù)據(jù)上報接口除了提供一個標(biāo)準(zhǔn)接口連接各個監(jiān)控點(diǎn)和收集模塊30,還需要負(fù)責(zé)處理一些對性能的優(yōu)化,典型的需求即把各監(jiān)控點(diǎn)的上報請求放入另一個線程去排隊(duì)執(zhí)行,使得監(jiān)控點(diǎn)的請求立刻返回,以避免對UI的流暢度產(chǎn)生不良影響。為了跨進(jìn)程接收各個監(jiān)控點(diǎn)從各個應(yīng)用程序進(jìn)程中通過數(shù)據(jù)上報接口上報的數(shù)據(jù),收集模塊30可以被設(shè)計(jì)為一個Data Provider,這是android系統(tǒng)的基本功能之一,一個Data ftxwider可以運(yùn)行在任何一個進(jìn)程,提供一套數(shù)據(jù)訪問接口,其他數(shù)據(jù)訪問的客戶端通過binder機(jī)制實(shí)現(xiàn)對這些接口的跨進(jìn)程訪問。在具體實(shí)施方案中,收集模塊30設(shè)計(jì)運(yùn)行于system server進(jìn)程,如此在其他普通應(yīng)用中運(yùn)行時該收集模塊30不會被內(nèi)存管理程序限制。收集模塊30由如下子模塊組成(a) Data Provider ^ Π Android 白勺 Data Provider ilil —白勺t示}Π 行工作,這些標(biāo)準(zhǔn)接口添加具體的實(shí)現(xiàn)代碼即可工作,其中最主要的是insert接口,其接受從數(shù)據(jù)上報接口傳來的數(shù)據(jù),initialValues中包括應(yīng)用程序的名稱、行為和操作時間等。public Uri insert (Uri uri, ContentValues initialValues)函數(shù)實(shí)現(xiàn)就是要把 initialValues中的數(shù)據(jù)轉(zhuǎn)換為下面所提到的數(shù)據(jù)庫操作的sql指令插入數(shù)據(jù)的相關(guān)表中。(b)數(shù)據(jù)庫=Android系統(tǒng)內(nèi)置的數(shù)據(jù)庫是sqlite,sqlite是一個輕量但功能完善的數(shù)據(jù)庫,支持標(biāo)準(zhǔn)的sql語法,在此用于存儲應(yīng)用程序上報的數(shù)據(jù),該數(shù)據(jù)庫為各個監(jiān)控點(diǎn)建立數(shù)據(jù)表,每個監(jiān)控點(diǎn)上報的數(shù)據(jù)自動進(jìn)入對應(yīng)的數(shù)據(jù)表,便于檢索。整個數(shù)據(jù)庫以 db文件的形式存在,支持備份和離線訪問。(c)備份服務(wù)數(shù)據(jù)庫在每次充放電周期都做一次備份,備份的文件為一個db文件,方便作為歷史記錄查詢。分析模塊40根據(jù)上述功耗數(shù)據(jù),分析應(yīng)用程序的功耗,包括數(shù)據(jù)挖掘單元41進(jìn)行數(shù)據(jù)挖掘。實(shí)現(xiàn)對數(shù)據(jù)進(jìn)行排序和復(fù)雜的檢索的功能,簡化用戶端的數(shù)據(jù)分析的復(fù)雜度。如圖3所示,UI單元42(UI Classes)通過DataDigHelper從 sqlite數(shù)據(jù)中索引數(shù)據(jù),通過添加各種條件可以按照UI界面的設(shè)置得到各種統(tǒng)計(jì)數(shù)據(jù),比如統(tǒng)計(jì)一段時間內(nèi)功率消耗較大的監(jiān)控點(diǎn)或應(yīng)用程序,實(shí)現(xiàn)計(jì)算邏輯并導(dǎo)出簡單的接口。 DataDigHelper實(shí)現(xiàn)了數(shù)據(jù)挖掘功能,挖掘的數(shù)據(jù)封裝在AppUsageinfo類中。UI單元42解析數(shù)據(jù)挖掘單元41獲得的數(shù)據(jù),并在圖形界面上顯示。UI設(shè)置子單元421提供一個可視化界面,實(shí)現(xiàn)各個應(yīng)用程序功耗的統(tǒng)計(jì)、細(xì)節(jié)分析和告警設(shè)置等功能。 為了方便用戶能簡單分析出移動終端功耗的問題,UI模塊需要支持方便的檢索視圖,方便用戶從所有程序列表中找到需要強(qiáng)制停止或卸載的程序和服務(wù)。為了能讓用戶在電池消耗完之前及時發(fā)現(xiàn)功耗過大的應(yīng)用程序,此模塊支持用戶的告警設(shè)置,用戶可以設(shè)置當(dāng)某個應(yīng)用程序持續(xù)不釋放鎖超過一段時間后告警,用戶也可以設(shè)置某應(yīng)用程序一段時間內(nèi)總功耗超過一預(yù)設(shè)閥值后告警,上述設(shè)置可以使用戶按照實(shí)際要求過濾一些不太常用卻嚴(yán)重影響功耗的應(yīng)用程序。統(tǒng)計(jì)子單元422通過對多次挖掘的數(shù)據(jù)進(jìn)行分析,可以把數(shù)據(jù)很直觀的顯示給用戶。圖4說明了數(shù)據(jù)統(tǒng)計(jì)的邏輯結(jié)構(gòu),可以從應(yīng)用程序模式和模塊模式多個角度來發(fā)現(xiàn)功率異常的應(yīng)用程序。告警模塊50是一個運(yùn)行于后臺的服務(wù),獨(dú)立于UI單元42,監(jiān)視系統(tǒng)的事件和應(yīng)用程序的行為。UI單元42可以設(shè)置告警選項(xiàng),告警模塊50根據(jù)用戶的告警設(shè)置實(shí)時監(jiān)視各個應(yīng)用程序的行為,一旦有超過閥值的行為,發(fā)送警告消息提醒用戶關(guān)閉或卸載相關(guān)的應(yīng)用程序以免電池意外耗光。實(shí)現(xiàn)時,可以將告警模塊50和數(shù)據(jù)手機(jī)服務(wù)捆綁在一起,也可以獨(dú)立做成一個 Android系統(tǒng)的service服務(wù)。其主要提供一個監(jiān)視線程,在線程中判斷用戶通過UI設(shè)置子單元421設(shè)置的條件從而實(shí)現(xiàn)對不同狀況的監(jiān)控。當(dāng)發(fā)現(xiàn)異常的行為滿足告警設(shè)置時, 可以通過intend的方式將告警信息上報給UI單元42,UI單元42負(fù)責(zé)向用戶以對話框的形式反饋。例如用戶設(shè)置一旦發(fā)現(xiàn)手機(jī)閑置后10分鐘后阻止系統(tǒng)睡眠的應(yīng)用,那么告警模塊50會時刻監(jiān)視用戶的按鍵、觸屏動作停止和屏幕滅的事件,并在這些行為發(fā)生后10分鐘后觸發(fā)告警程序。又例如用戶設(shè)置了監(jiān)視長期占用CPU比例50%以上的應(yīng)用程序,那么告警模塊50 每一段時間統(tǒng)計(jì)CPU的占用時間,找出占用時間超過50%的應(yīng)用上報給UI界面。本實(shí)施例中,通過設(shè)置監(jiān)控點(diǎn),監(jiān)控Android終端內(nèi)應(yīng)用程序的行為,并對監(jiān)控后的數(shù)據(jù)進(jìn)行分析處理,使得因應(yīng)用程序行為而惡化Android終端功耗的問題得到有效控制,提高了用戶體驗(yàn)度。以上所述僅為本發(fā)明的優(yōu)選實(shí)施例,并非因此限制本發(fā)明的專利范圍,凡是利用本發(fā)明說明書及附圖內(nèi)容所作的等效結(jié)構(gòu)或等效流程變換,或直接或間接運(yùn)用在其他相關(guān)的技術(shù)領(lǐng)域,均同理包括在本發(fā)明的專利保護(hù)范圍內(nèi)。
權(quán)利要求
1.一種Android終端應(yīng)用程序功耗監(jiān)控的方法,其特征在于,包括 通過預(yù)設(shè)的監(jiān)控點(diǎn)捕獲應(yīng)用程序的行為;收集所述應(yīng)用程序的行為的功耗數(shù)據(jù);根據(jù)所述功耗數(shù)據(jù),分析所述應(yīng)用程序的功耗,并將分析結(jié)果顯示于Android終端。
2.如權(quán)利要求1所述的方法,其特征在于,在執(zhí)行所述將分析結(jié)果顯示于Android終端之后,還包括對滿足預(yù)設(shè)的告警規(guī)則的應(yīng)用程序,發(fā)出告警。
3.如權(quán)利要求1或2所述的方法,其特征在于,在執(zhí)行所述通過預(yù)設(shè)的監(jiān)控點(diǎn)捕獲應(yīng)用程序的行為之前,還包括設(shè)置捕獲應(yīng)用程序行為的監(jiān)控點(diǎn)。
4.如權(quán)利要求1或2所述的方法,其特征在于,所述根據(jù)功耗數(shù)據(jù),分析應(yīng)用程序的功耗,包括對所述功耗數(shù)據(jù)進(jìn)行排序和檢索; 統(tǒng)計(jì)所述排序和檢索后的功耗數(shù)據(jù)。
5.如權(quán)利要求4所述的方法,其特征在于,所述統(tǒng)計(jì)排序和檢索后的功耗數(shù)據(jù)具體為 通過用戶界面接受應(yīng)用程序功耗統(tǒng)計(jì)的設(shè)置;根據(jù)所述設(shè)置進(jìn)行統(tǒng)計(jì)邏輯計(jì)算。
6.一種Android終端應(yīng)用程序功耗監(jiān)控的裝置,其特征在于,包括 捕獲模塊,用于通過預(yù)設(shè)的監(jiān)控點(diǎn)捕獲應(yīng)用程序的行為;收集模塊,用于收集所述應(yīng)用程序的行為的功耗數(shù)據(jù);分析模塊,用于根據(jù)所述功耗數(shù)據(jù),分析所述應(yīng)用程序的功耗,并將分析結(jié)果顯示于 Android 終端。
7.如權(quán)利要求6所述的裝置,其特征在于,還包括告警模塊,用于對滿足預(yù)設(shè)的告警規(guī)則的應(yīng)用程序,發(fā)出告警。
8.如權(quán)利要求6或7所述的裝置,其特征在于,還包括 設(shè)置模塊,用于設(shè)置捕獲應(yīng)用程序行為的監(jiān)控點(diǎn)。
9.如權(quán)利要求6或7所述的裝置,其特征在于,所述分析模塊包括 數(shù)據(jù)挖掘單元,用于對所述功耗數(shù)據(jù)進(jìn)行排序和檢索;UI單元,用于統(tǒng)計(jì)所述排序和檢索后的功耗數(shù)據(jù)。
10.如權(quán)利要求9所述的裝置,其特征在于,所述UI單元包括UI設(shè)置子單元,用于通過用戶界面接受應(yīng)用程序功耗統(tǒng)計(jì)的設(shè)置; 統(tǒng)計(jì)子單元,用于根據(jù)所述設(shè)置進(jìn)行統(tǒng)計(jì)邏輯計(jì)算。
全文摘要
本發(fā)明揭示了一種Android終端應(yīng)用程序功耗監(jiān)控的方法,包括通過預(yù)設(shè)的監(jiān)控點(diǎn)捕獲應(yīng)用程序的行為;收集所述應(yīng)用程序的行為的功耗數(shù)據(jù);根據(jù)所述功耗數(shù)據(jù),分析所述應(yīng)用程序的功耗,并將分析結(jié)果顯示于Android終端。本發(fā)明還提供了對應(yīng)的裝置。本發(fā)明提供的一種Android終端應(yīng)用程序功耗監(jiān)控的方法和裝置,解決Android終端由于應(yīng)用程序的行為而增大功耗的問題。
文檔編號G06F11/32GK102306118SQ20111025557
公開日2012年1月4日 申請日期2011年8月31日 優(yōu)先權(quán)日2011年8月31日
發(fā)明者曾慧鵬 申請人:中興通訊股份有限公司