專利名稱:一種數據流量統計方法及終端的制作方法
技術領域:
本發明屬于移動通信領域,尤其涉及一種數據流量統計方法及終端。
背景技術:
如今大部分的智能終端都具有上網功能,尤其是隨著智能手機的普及,將人們帶入了網絡時代。通常智能終端都安裝有大量的應用軟件,但其中可能存在一些在后臺偷偷消耗流量的吸費軟件,這樣用戶即使在不使用網絡連接亦會耗費不少流量,用戶卻難以查找是哪些應用軟件在后臺偷偷消耗流量從而對應刪除該應用,因此讓人頭痛不已。雖然在智能終端上出現了一些流量統計軟件,這些軟件能夠統計出應用程序所屬UID(UserID,用戶號)所產生的流量,可以通過縮小范圍大致判斷哪些應用產生了多少流量。由于每個應用程序都有一個WD,默認情況下,互不相關的應用程序的WD通常不同,但 如果應用程序間需要互相調用,那么這些相互調用的應用程序的WD必須相同,所以UID號和單應用之間是一對多的關系,即多個單應用可能具有同一個WD,那么在這種情況下,現有技術只能知道屬于同一 WD的單應用所產生的數據流量,無法進一步確認是該UID下具體的哪些單應用產生了多少數據流量。
發明內容
鑒于上述問題,本發明的目的是提供一種數據流量統計方法,旨在解決現有技術中,無法按照不同的單應用區分數據流量的產生和使用的技術問題。本發明是這樣實現的,一種數據流量的統計方法,所述方法包括下述步驟當產生網絡連接時,獲取當前進行網絡連接的單應用并開始計算數據流量值;當所述單應用停止使用網絡連接時,獲取本次網絡連接產生的數據流量值;將所述本次網絡連接產生的數據流量值計入所述單應用的數據流量總值。本發明的另一目的在于提供一種終端,所述終端包括網絡連接單應用獲取單元,用于當產生網絡連接時,獲取當前進行網絡連接的單應用并開始計算數據流量值。網絡連接數據流量獲取單元,用于當所述單應用停止使用網絡連接時,獲取本次網絡連接產生的數據流量值。數據流量計入單元,用于將所述本次網絡連接產生的數據流量值計入所述單應用的數據流量總值。在本發明實施例中,通過獲取產生網絡連接的各個單應用,再對各個單應用產生的網絡流量進行統計,得到各個單應用產生的數據流量總值,解決了現有技術中只能統計每個WD所產生的數據流量,無法統計單個應用產生的數據流量的技術問題。在本發明實施例中,用戶可以根據各個單應用所產生的數據流量總值,可以進一步確定哪些單應用是后臺吸費軟件并做后續處理。
圖I是本發明第一實施例提供的一種數據流量統計方法的流程圖;圖2是本發明第二實施例提供的一種數據流量統計方法的流程圖;圖3是本發明第三實施例提供的一種終端的結構方框圖;圖4是本發明第四實施例提供的另一種終端的結構方框圖。
具體實施例方式為了使本發明的目的、技術方案及優點更加清楚明白,以下結合附圖及實施例,對本發明進行進一步詳細說明。應當理解,此處所描述的具體實施例僅僅用以解釋本發明,并不用于限定本發明。為了說明本發明所述的技術方案,下面通過具體實施例來進行說明。
實施例一:圖I示出了本發明實施例提供的一種數據流量統計方法的流程,為了便于說明僅不出了與本發明實施例相關的部分。在步驟SlOl中,當產生網絡連接時,獲取當前進行網絡連接的單應用并開始計算數據流量值。其中,每個單應用都有唯——個應用包名,本步驟中需要監控網絡連接,當產生網絡連接時,根據網絡端口的連接請求獲取當前進行網絡連接的單應用的包名,并根據所述包名確定當前進行網絡連接的單應用。在獲取當前進行網絡連接的單應用之后,開始計算數據流量值。在步驟S102中,當所述單應用停止使用網絡連接時,獲取本次網絡連接產生的數據流量值。在本步驟中,獲取到當前進行網絡連接的單應用后,開始計算該單應用實際產生的數據流量值,直至該單應用停止使用網絡連接,那么就可以獲取到本次網絡連接所產生的數據流量值。在步驟S103中,將所述本次網絡連接產生的數據流量值計入所述單應用的數據
流量總值。每個單應用都在數據庫中對應一個數據流量總值,所述數據流量總值表明了該單應用總共產生了多少數據流量。在本步驟中,每次網絡連接都可以獲取到發起該次網絡連接的單應用在本次網絡連接中所產生的數據流量值,再將所述數據流量值計入到所述單應用的數據流量總值,這樣根據所述數據庫中的數據流量總值就可以知曉每個單應用總共產生了多少數據流量。在本發明實施例I中,通過獲取產生網絡連接的各個單應用,再對各個單應用產生的網絡流量進行統計,得到各個單應用產生的數據流量總值,解決了現有技術中只能統計每個WD所產生的數據流量,無法統計單個應用產生的數據流量的技術問題。在本發明實施例中,用戶可以根據各個單應用所產生的數據流量總值,可以進一步確定哪些單應用是后臺吸費軟件并做后續處理。實施例二 :圖2示出了本發明第二實施例提供的一種數據流量統計方法的流程,為了便于說明僅不出了與本發明實施例相關的部分。在步驟S201中,建立流量數據庫,為每個有網絡連接權限的單應用分別建立數據流量總值。在本步驟中,首先需要分析出安裝的單應用中哪些具有網絡連接權限,并建立流量數據庫,為這些單應用分別建立數據流量總值。本步驟通過建立數據庫實現存儲數據流量總值,便于流量數據的統一管理和調用。在步驟S202中,當產生網絡連接時,獲取當前產生數據流量的單應用并開始計算數據流量值。在本步驟中,通常需要單獨監控各個單應用,當監控到有單應用產生網絡連接時,獲取所述單應用即可。進一步的,為了提高監控效率,只需監控數據流量端口,當監控到有網絡連接時,根據數據包中的包頭標示位即可找到對應的產生該網絡連接的單應用。在獲 取產生數據流量的單應用后,開始計算數據流量值。具體來說,為了實現獲取到產生數據流量的單應用,首先需要獲取產生數據流量的當前線程所在單應用的包名(PackageName),并根據所述包名確定當前進行網絡連接的單應用,根據所述獲取的單應用開始計算數據流量值。所述包名的獲取可以通過以下方式實現每一個單應用都有一個唯一包名,通常一個單應用的程序包中可以包括多個線程,這些線程有可能有不同的創建方法和運行上下文,如 Activity 線程,Service 線程,Content Provider 線程,Java 類線程,以及 JNI (JavaNative Interface, Java本機接口)直接調C創建的線程等。單應用在執行不同的線程時,如果線程需要使用網絡連接,那么就需要記下該線程所在的單應用的包名。為了實現此目的,在具體實現時通過設置一組函數用來設置和獲取當前線程所在單應用的包名,比如函數SetThreadPackageName與getThreadPackageName,該函數可以通過JNI操作底層內核,最終在內核層中通過Current獲取到當前進程的Task struct結構體的地址,進而獲取到該結構體中包含的所述單應用包包名。具體的,針對不同線程具體處理方式如下對于Activity線程,它的handlemessage每處理一個消息,調用SetThreadPackageName 函數記錄 Activity 線程當前處理的 package。對于Content Provider線程,在執行onTransact時,如果發現當前線程還沒有設置過包名,調用SetThreadPackageName函數記錄Activity線程當前處理的package。對于java類線程,需要在其創建時先記錄下當前線程(即將要運行的線程的父親)的包名,當新建的線程運行時即其run O被調用時設置包名。對于service線程,其上下文就是Activity線程,所以不用處理了。對于JNI直接調C創建的線程,如果父線程的包名成員有效,就會被克隆出來,所以不用處理。需要說明的是,以上對于本發明實施例具體實現方式的說明并不構成對本發明實施例內容的限定,本領域技術人員不需經過創造性勞動可采取的其他方式也屬于本發明實施例的保護的范圍。在步驟S203中,當所述產生數據流量的單應用發生變化時,停止計算數據流量值并獲取計算結果作為本次網絡連接產生的數據流量值。
在本發明實施例中,當所述產生數據流量的單應用發生變化時,表明步驟S202中確定的所述單應用已經停止使用網絡連接,當前網絡連接結束,此時停止計算數據流量值,并將計算結果作為本次網絡連接所產生的數據流量值。具體的,在本步驟中,系統底層內核中提供有數據流量接口,所述數據流量接口的本質為一個統計端口流量的接口函數,所述數據流量接口通過監控網絡連接,可以統計出從當前網絡連接開始到網絡連接結束的時段內所產生的數據流量。為了具體實現獲取本次網絡連接的數據流量值,當所述產生數據流量的單應用發生變化時,應用層JNCCJavaNative Interface, Java本機接口)調用所述數據流量接口,便可以獲取到本次網絡連接產生的數據流量值,再將該數據流量值與本次網絡連接獲取的單應用相關聯,這樣每次產生網絡連接時,都會獲取到一個數據流量值,以及該數據流量值對應的單應用。在步驟S204中,將所述本次網絡連接產生的數據流量值計入所述單應用對應的流量數據庫。在本步驟中,數據流量庫中存儲有單應用所產生的數據流量總值,前述步驟中獲取到了產生數據流量的單應用,以及本次網絡連接所產生的數據流量值,由于單應用和數據流量總值是一一對應關系,這里再將所述得到的數據流量值計入所述單應用對應的數據流量總值中即可。所述將數據流量值計入所述單應用對應的數據流量總值中的實現方式有多種,比如可以為將本次網絡連接產生的數據流量值與流量數據庫中當前的數據流量總值進行累加,并將累加結果作為新的數據流量總值存儲到所述流量數據庫中。這樣流量數據庫中存儲的都是最新的數據流量總值。在步驟S205中,當到達預定的數據更新時間時,清空所有單應用的數據流量總值。在本步驟中,作為優選的實施方式,流量數據庫按照預定規則存儲流量數據總值,比如,所述預定規則可以設置為數據流量總值用于統計每個單應用在預定時期內產生的流量總和,當到達預定的數據更新時間時,比如每個月的最后一天24時,系統便會自動清空所有單應用的數據流量總值。這樣可以準確統計出各個單應用在預定時期內所產生的數據流量總值,并可以進一步統計出預定周期內的所有單應用產生的流量總和。根據本發明實施例2,由于本發明技術方案通過建立流量數據庫,并對每個單應用建立數據流量總值,并在產生網絡連接時,獲取當前進行網絡連接的單應用并開始計算所述單應用產生的數據流量值,在當前使用網絡連接的單應用發生改變時,獲取本次網絡連接產生的數據流量值,并將所述數據流量值更新到對應的數據流量總值中,這樣用戶可以根據所述數據流量總值確定每個單應用實際使用的數據流量,有效定位后臺吸流量的應用。同時,根據本發明實施例2提供的可選方案,還可以實現周期對所述流量數據庫清空,實現流量的周期監控。實施例三:圖3示出了本發明第三實施例提供的一種終端的結構方框圖,為了便于說明僅示出了與本發明實施例相關的部分。 圖示中,所述裝置包括網絡連接單應用獲取單元301,用于當產生網絡連接時,獲取當前進行網絡連接的單應用并開始計算數據流量值。
其中,每個單應用都有唯——個應用包名,所述網絡連接單應用獲取單元需要監控網絡連接,當產生網絡連接時,根據網絡端口的連接請求獲取當前進行網絡連接的單應用的包名,并根據所述包名確定當前進行網絡連接的單應用。在獲取當前進行網絡連接的單應用之后,開始計算數據流量值。網絡連接數據流量獲取單元302,用于當所述單應用停止使用網絡連接時,獲取本次網絡連接產生的數據流量值。在獲取到當前進行網絡連接的單應用后,開始計算該單應用實際產生的數據流量值,直至該單應用停止使用網絡連接,那么就可以獲取到本次網絡連接所產生的數據流量值。數據流量計入單元303,用于將所述本次網絡連接產生的數據流量值計入所述單應用的數據流量總值。
每個單應用都在數據庫中對應一個數據流量總值,所述數據流量總值表明了該單應用總共產生了多少數據流量。在本步驟中,每次網絡連接都可以獲取到發起該次網絡連接的單應用在本次網絡連接中所產生的數據流量值,再將所述數據流量值計入到所述單應用的數據流量總值,這樣根據所述數據庫中的數據流量總值就可以知曉每個單應用總共產生了多少數據流量。實施例四圖4示出了本發明第四實施例提供的一種終端的結構方框圖,為了便于說明僅示出了與本發明實施例相關的部分。本實施例所述的終端在實施例三的基礎上還包括流量數據庫創建單元401,用于建立流量數據庫,為每個有網絡連接權限的單應用分別建立數據流量總值。在本發明實施例中,首先需要分析出安裝的單應用中哪些具有網絡連接權限,并建立流量數據庫,為這些單應用分別建立數據流量總值。本步驟通過建立數據庫實現存儲數據流量總值,便于流量數據的統一管理和調用。網絡連接單應用獲取單元402,用于當產生網絡連接時,獲取當前進行網絡連接的單應用并開始計算數據流量值。其中,每個單應用都有唯——個應用包名,所述網絡連接單應用獲取單元需要監控網絡連接,當產生網絡連接時,根據網絡端口的連接請求獲取當前進行網絡連接的單應用的包名,并根據所述包名確定當前進行網絡連接的單應用,根據所述獲取的單應用開始計算數據流量值。所述網絡連接單應用獲取單元402包括單應用獲取子單元4021,用于當產生網絡連接時,獲取當前產生數據流量的單應用。數據流量值計算單元4022,用于當產生網絡連接時,開始計算數據流量值。在本發明實施例中,單應用獲取子單元通常需要單獨監控各個單應用,當監控到有單應用產生網絡連接時,獲取所述單應用即可。進一步的,為了提高監控效率,單應用獲取子單元只需監控數據流量端口,當監控到有網絡連接時,根據數據包中的包頭標示位即可找到對應的產生該網絡連接的單應用。為了實現獲取到產生數據流量的單應用,首先需要獲取產生數據流量的當前線程所在單應用的包名,并根據所述包名確定當前進行網絡連接的單應用,獲取到單應用后,數據流量值計算單元開始計算數據流量值。在本發明實施例中,為了實現獲取到單應用的包名,具體實現時,可以通過以下方案實現每一個單應用都有一個唯一包名,通常一個單應用的程序包中可以包括多個線程,這些線程有可能有不同的創建方法和運行上下文,如Activity線程,Service線程,Content Provider 線程,Java 類線程,以及 JNI (Java Native Interface, Java 本機接口)直接調C創建的線程等。單應用在執行不同的線程時,如果線程需要使用網絡連接,那么就需要記下該線程所在的單應用的包名。為了實現此目的,在具體實現時通過設置一組函數用來設置和獲取當前線程所在單應用的包名,比如函數SetThreadPackageName與getThreadPackageName,該函數可以通過JNI操作底層內核,最終在內核層中通過Current獲取到當前進程的Task_struct結構體的地址,進而獲取到該結構體中包含的所述單應用包包名。對于不同線程的具體函數實現方法請參考方法實施例相關內容描述。網絡連接數據流量獲取單元403,用于當所述單應用停止使用網絡連接時,獲取本次網絡連接產生的數據流量值,包括
計算結果獲取單元4031,用于當所述產生數據流量的單應用發生變化時,停止計算數據流量值并獲取獲取計算結果作為本次網絡連接產生的數據流量值。在本發明實施例中,當所述產生數據流量的單應用發生變化時,表明所述單應用已經停止使用網絡連接,當前網絡連接結束,此時停止計算數據流量值,并將計算結果作為本次網絡連接所產生的數據流量值。本實施例中,系統底層內核中提供有數據流量接口,所述數據流量接口的本質為一個統計端口流量的接口函數,所述數據流量接口通過監控網絡連接,可以統計出從當前網絡連接開始到網絡連接結束的時段內所產生的數據流量。為了具體實現獲取本次網絡連接的數據流量值,當所述產生數據流量的單應用發生變化時,應用層JNC調用所述數據流量接口,便可以獲取到本次網絡連接產生的數據流量值,再將該數據流量值與本次網絡連接獲取的單應用相關聯,這樣每次產生網絡連接時,都會獲取到一個數據流量值,以及該數據流量值對應的單應用。數據流量計入單元404,用于將所述本次網絡連接產生的數據流量值計入所述單應用的數據流量總值,包括流量數據庫寫入單元4041,用于將所述本次網絡連接產生的數據流量值計入所述單應用對應的數據流量總值。在本發明實施例中,數據流量庫中存儲有單應用所產生的數據流量總值,前述部分中獲取到了產生數據流量的單應用,以及本次網絡連接所產生的數據流量值,由于單應用和流量數據庫是一一對應關系,這里再將所述得到的數據流量值計入所述單應用對應的數據流量總值中即可。所述將數據流量值計入所述單應用對應的數據流量總值中的實現方式有多種,比如可以為將本次網絡連接產生的數據流量值與流量數據庫中當前的數據流量總值進行累加,并將累加結果作為新的數據流量總值存儲到所述流量數據庫中。這樣流量數據庫中存儲的都是最新的數據流量總值。進一步,作為優選的實施方式,所述終端還包括清空單元405,用于當到達預定的數據更新時間時,清空所有單應用的數據流量總值。在本發明實施例中,流量數據庫按照預定規則存儲流量數據總值,比如,所述預定規則可以設置為數據流量總值用于統計每個單應用在預定時期內的產生的流量總和,當到達預定的數據更新時間時,比如每個月的最后一天24時,系統便會自動清空所有單應用的數據流量總值。這樣可以準確統計出各個單應用在預定時期內所產生的數據流量總值,并可以進一步統計出預定周期內的所有單應用產生的流量總和。本發明實施例提供的終端通過具體統計出每個單應用所產生的數據流量總值,SP使多個單應用屬于同一 HD的情況下,用戶也能夠清楚知曉每個單應用的具體流量消耗情況。比如假設用戶在智能終端(如手機)上安裝了 2個單應用(分別是A和B),這兩個單應用都綁定在systemuid(lOOO)下,即兩者的UID均為1000,并且都有上網權限。若用戶使用單應用A連接網絡并在后臺下載數據,再使用單應用B連接網絡查看朋友最新動態以及尋找有趣的事情等等。那么,通過本發明實施例,可分別對單應用A和單應用B分別進行上網流量的統計,同時可按照要求顯示出來,方便用戶直觀查看當前各應用的上網情況,t匕如,用戶通過查詢獲知,單應用A本月當前已使用的上網流量為10M,單應用B本月當前使用量30M,但是卻查詢到systemuid(lOOO)下還有單應用C當前已使用的上網流量為100M,并且平時基本上沒有怎么使用過單應用C。那么,很顯然,單應用C就是后臺吸費軟件。該用戶可以針對該應用采取相應措施,如果采用現有技術智能知曉UID為1000的單應用共產生了 140M流量,但無法知曉具體單應用的流量消耗情況,也就無法知曉那個是吸費軟件了。 因此通過本發明技術方案可以使每個單應用的流量使用情況變得透明。本領域普通技術人員可以理解,實現上述實施例的方法的過程可以通過程序指令相關的硬件來完成,所述的程序可以存儲于可讀取存儲介質中,該程序在執行時執行上述方法中的對應步驟。所述的存儲介質可以如R0M/RAM、磁碟、光盤等。
權利要求
1.一種數據流量統計方法,其特征在于,所述方法包括下述步驟 當產生網絡連接時,獲取當前進行網絡連接的單應用并開始計算數據流量值; 當所述單應用停止使用網絡連接時,獲取本次網絡連接產生的數據流量值; 將所述本次網絡連接產生的數據流量值計入所述單應用的數據流量總值。
2.如權利要求I所述的數據流量統計方法,其特征在于,所述方法在獲取當前產生網絡連接的單應用之前還包括 為每個有網絡連接權限的單應用分別建立流量數據庫;
3.如權利要求2所述的數據流量統計方法,其特征在于,所述將本次網絡連接產生的數據流量值計入所述單應用的數據流量總值包括 將所述本次網絡連接產生的數據流量值計入所述單應用對應的流量數據庫。
4.如權利要求1-3中任意一項所述的數據流量統計方法,其特征在于,所述當產生網絡連接時,獲取當前進行網絡連接的單應用并開始計算數據流量值包括 當產生網絡連接時,獲取當前產生數據流量的單應用并開始計算數據流量值; 所述當所述單應用停止使用網絡連接時,獲取本次網絡連接產生的數據流量值包括 當所述產生數據流量的單應用發生變化時,停止計算數據流量值并獲取計算結果作為本次網絡連接產生的數據流量值。
5.如權利要求1-4中任意一項所述的數據流量統計方法,其特征在于,所述數據流量統計方法還包括 當到達預定的數據更新時間時,清空所有單應用的數據流量總值。
6.—種終端,其特征在于,所述終端包括 網絡連接單應用獲取單元,用于當產生網絡連接時,獲取當前進行網絡連接的單應用并開始計算數據流量值; 網絡連接數據流量獲取單元,用于當所述單應用停止使用網絡連接時,獲取本次網絡連接產生的數據流量值; 數據流量計入單元,用于將所述本次網絡連接產生的數據流量值計入所述單應用的數據流量總值。
7.如權利要求6所述的終端,其特征在于,所述終端還包括 流量數據庫創建單元,用于為每個有網絡連接權限的單應用分別建立流量數據庫。
8.如權利要求7所述的終端,其特征在于,所述數據流量計入單元包括 流量數據庫寫入單元,用于將所述本次網絡連接產生的數據流量值計入所述單應用對應的流量數據庫。
9.如權利要求6-8中任意一項所述的終端,其特征在于,所述網絡連接單應用獲取單元包括 單應用獲取子單元,用于當產生網絡連接時,獲取當前產生數據流量的單應用。
數據流量值計算單元,用于當所述單應用獲取子單元已獲取當前產生數據流量的單應用時,開始計算數據流量值。
所述網絡連接數據流量獲取單元包括 計算結果獲取單元,用于當所述產生數據流量的單應用發生變化時,停止計算數據流量值并獲取獲取計算結果作為本次網絡連接產生的數據流量值。
10.如權利要求6-9中任意一項所述的終端,其特征在于,所述終端還包括清空單元,用于當到達預定的數據更新時間時,清空所有單應用的數據流量總值。
全文摘要
本發明適用于移動通信領域,提供一種數據流量統計方法及終端,所述方法包括下述步驟當產生網絡連接時,獲取當前進行網絡連接的單應用并開始計算數據流量值;當所述單應用停止使用網絡連接時,獲取本次網絡連接產生的數據流量值;將所述本次網絡連接產生的數據流量值計入所述單應用的數據流量總值。本發明通過獲取到產生網絡連接的各個單應用,在產生網絡連接的單應用發生變化時,對當前單應用產生的數據流量值進行統計,這樣即使存在多個單應用屬于同一UID的情況下,最終也可以統計出各個單應用所產生的數據流量總值。
文檔編號H04W24/00GK102711139SQ201210123218
公開日2012年10月3日 申請日期2012年4月24日 優先權日2012年4月24日
發明者趙吉昌 申請人:華為終端有限公司