У меня возникли проблемы с монитором трафика данных в 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.
Я хотел бы знать, если что-то не так с моим вопросом, так как это мой первый раз в StackOverFlow –