2015-11-10 8 views
2

У меня возникли проблемы с монитором трафика данных в Android. Я должен получить байты, переданные на каждый UID и полученные байты на каждый UID, а также общую сумму всех UID (разделенных на переданные и полученные тоже). Проблема в том, что сумма всех индивидуальных значений UID отличается от значений, которые я получаю от вызова TrafficStats.getTotalRxBytes() и TrafficStats.getTotalTxBytes() (это общие переданные и полученные значения для всех UID). Как правило, общие значения больше, чем суммы всех UID (например, 105 МБ против 95 МБ для полученных значений).Использование данных мониторинга в Android: разница между общей статистикой и статистикой UID

Я сравниваю значение, полученное из TrafficStats.getTotalRxBytes() с суммой TrafficStats.getUidRxBytes (uid), вызываемой для каждого UID. То же самое относится к переданным значениям.

Вот фрагмент кода я использую, чтобы получить список UIDs:

File dir = new File("/proc/uid_stat/"); 
String[] children = dir.list(); 
List<Integer> uids = new ArrayList<>(); 
if (children != null) { 
    for (int i = 0; i < children.length; i++) { 
     int uid = Integer.parseInt(children[i]); 
     if ((uid >= 0 && uid <= 2000) || (uid >= 10000)) { 
      uids.add(uid); 
     } 
    } 
} 

Я также попытался без условия ((UID> = 0 & & UID < = 2000) || (UID> = 10000)), проверяя, только если uid => 0, но в моем случае это одно и то же.

Некоторые вещи, которые я заметил: если я отправлю 6 МБ видео через whatsapp, в следующий раз, когда я выполню чтение, значение TX для whatsapp не увеличит это количество. Он увеличивает только несколько байтов (например, 4500). Я ищу еще одно приложение, которое было увеличено примерно на 6 МБ, например, MEDIA, но его нет. Я не знаю, сжимает ли whatsap видео или что.

Я читал о некоторых ошибках, таких как дублированные значения в файлах UID (/ proc/uid_stat/[uid] /) в Android 2.3 или более ранних версиях, но я тестирую приложение на реальном устройстве с 4.1.2.

Я выполнил несколько шагов, описанных в блоге this.

Я хочу знать, является ли эта разница нормальной или если что-то не так с моим кодом. Я читал, что правильными значениями являются итоговые значения, а не суммы UID.

+0

Я хотел бы знать, если что-то не так с моим вопросом, так как это мой первый раз в StackOverFlow –

ответ

1

Когда вы используете TrafficStats.getUidRxBytes или TrafficStats.getUidTxBytes, он учитывает только платную нагрузку, отправленную UID, но не размер заголовков. Таким образом, будет небольшая разница между суммой всех UID и getTotalRxBytes() или getTotalTxBytes. Разница будет казаться большей для потоковых служб, Voip или большой загрузки файлов.