TrafficStats Api android und Berechnung der täglichen Datennutzung

8

Verwechseln Sie zwei Methoden von TrafficStats von Android: getUidTxBytes (int uid) und getUidRxBytes (int uid) , Diese beiden Methoden geben die Anzahl der übertragenen und empfangenen Bytes zurück das Netzwerk für diese UID.Aber was ist die Zeiteinheit davon, ist es pro Sekunde. Wenn ich pro App übertragene und empfangene Daten berechnen möchte, was sollte ich mache. Ich thoght einen Weg, um Daten in sql zu speichern und weiter Daten in die Tabelle hinzuzufügen. Ist es richtig.

    
Naba 03.10.2011, 17:08
quelle

4 Antworten

5

Dies sind Zähler "seit der Schnittstelle ging" oder "seit die Anwendung mit dieser UID gestartet hat". Sagen Sie also, wenn Ihr Telefon in den "Flugmodus" und dann zurück geht, können die Zähler wieder bei Null beginnen. Wenn Sie Werte pro Sekunde benötigen, müssen Sie diese Funktionen jede Sekunde aufrufen und dann das Delta des letzten Aufrufs verwenden. Wenn das Delta negativ ist, benutze einfach den Wert wie es ist, das bedeutet, dass der Zähler wieder von Null gestartet wurde.

Noch eine Sache: Soweit ich weiß, zählen diese Zähler nur TCP / IP. Nicht UDP. Wenn Sie also eine sehr genaue Abrechnung benötigen und die betreffende Anwendung UDP / IP oder ein anderes Protokoll außer TCP verwendet, sind diese Zähler falsch.

Für den Einblick, wie diese Funktion funktioniert, schauen Sie sich die Quelle von Android, frei verfügbar. Die fragliche Datei ist ./frameworks/base/core/jni/android_net_TrafficStats.cpp

Diese Funktion ruft die Daten von /proc/uid_stat/[uid]/tcp_snd ab. Wenn Sie mehr Informationen darüber benötigen, müssen Sie in den Linux-Kernel eintauchen ...

    
haimg 03.10.2011, 20:58
quelle
4

Diese Zähler enthalten die Bytezahl seit dem letzten Neustart. Einige Telefone diese Zähler können regelmäßig zurückgesetzt werden, aber die meiste Zeit sie nur nach einem Neustart zurückgesetzt. Wenn Sie in den Flugzeugmodus wechseln oder zwischen Handy und WLAN wechseln, werden diese Zähler nicht zurückgesetzt.

Ein wichtiger Punkt ist, dass diese Zähler nicht den Paket-Overhead, sondern nur die Nutzlastgröße enthalten. Dies würde typischerweise bedeuten, dass 3-4% der Daten nicht berücksichtigt werden. Wenn es sich jedoch um eine Streaming-, Torrent- oder VoIP-App handelt, bei der die Paketnutzlasten gering sind, kann es sein, dass viel mehr Daten nicht erfasst werden.

Interessanterweise enthalten getTotalRxBytes (empfangene Bytes über alle Schnittstellen, ex Mobile und Wi-Fi kombiniert) und getMobileRxBytes (empfangene Bytes nur auf der mobilen Schnittstelle) alle Bytes inklusive Overhead. Im Grunde genommen ist die Gesamtanzahl Ihrer App-Byte weniger als die Gesamtzahl Ihrer Schnittstellen-Bytes und daher weniger als die Menge an Daten, für die Ihr Netzbetreiber Sie abrechnet.

Ein letzter Punkt: Die meisten Streaming-Apps berücksichtigen ihre Daten nicht unter ihrer eigenen UID. Sie werden unter der system.media UID abgerechnet. Wenn Sie also die Datennutzung für YouTube überwachen, wird unter dieser App nur eine sehr kleine Datenmenge angezeigt. der Rest wird unter der Medien UID (1013) sein.

    
OldSchool4664 02.04.2013 20:49
quelle
2

Hier bekomme ich diese Apps, die die Erlaubnis des Internets haben, Sie können den Berechtigungsnamen ändern und Apps gemäß Ihren Anforderungen abrufen.

%Vor%     
Narendra Sorathiya 30.03.2016 10:56
quelle
0

getUidRxBytes () und getUidTxBytes () werden grundsätzlich für empfangene bzw. übertragene Bytes verwendet. Um Ihre Daten für jede App zu überwachen, finden Sie einfach die UID jedes Prozesses und finden Sie die entsprechenden Daten für jeden Prozess und das werden Ihre Daten für jede App und dann können Sie diesen Code für Berechnungen verwenden.

%Vor%     
Iqbal Singh 28.02.2014 07:31
quelle

Tags und Links