I am trying to get real traffic statistics data. But TrafficStats.getTotalRxBytes () is less than the sum of TrafficStats.getUidRxBytes () for each installed application. I found this by running this code every 30 seconds (while on a Wi-Fi network):
long total = TrafficStats.getTotalRxBytes(); long mobileTotal = TrafficStats.getMobileRxBytes(); long wifiTotal = (total - mobileTotal); Log.v("SSS", "total=" + total + " mob=" + mobileTotal + " wifi=" + wifiTotal); ArrayList<Integer> uids = new ArrayList<Integer>(); int cnt = 0; for (ApplicationInfo appInfo : packageManager.getInstalledApplications(0)) { long bytes = TrafficStats.getUidRxBytes(appInfo.uid); if (!uids.contains(appInfo.uid)) {
And this is in the logs:
12-12 19:43:18.798: V/SSS(4772): total=4245863 mob=0 wifi=4245863 12-12 19:43:19.569: V/SSS(4772): sum traffic stats = 9313461 12-12 19:43:49.628: V/SSS(4772): total=4245915 mob=0 wifi=4245915 12-12 19:43:50.459: V/SSS(4772): sum traffic stats = 9314216 12-12 19:44:20.518: V/SSS(4772): total=4246524 mob=0 wifi=4246524 12-12 19:44:21.439: V/SSS(4772): sum traffic stats = 9320030
The difference between the totals is less than the difference between the amounts:
9320030 - 9314216 = 5814 bytes // sums of traffic stats by uid 4246524 - 4245915 = 609 bytes // total traffic stats
1) Why? 2) How to get the correct value for general traffic statistics - should I just summarize traffic statistics using uids?
source share