Platform-tools\adb.exe — высокая загрузка ЦП на сервере (Windows)Android

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Platform-tools\adb.exe — высокая загрузка ЦП на сервере (Windows)

Сообщение Anonymous »

Использование ADB в Java-приложении для мониторинга состояния устройства Android каждые три секунды. Используются команды adb по высоте:
adb shell settings get global airplane_mode_on
adb shell settings get system system_locales
adb shell dumpsys telephony.registry
adb shell "dumpsys content | grep ^Account | grep @ | grep com.google"
adb shell getprop gsm.network.type adb shell getprop gsm.operator.alpha
adb shell settings get system screen_off_timeout
adb shell settings get global wifi_on

За исключением команд dumpsys, ответы представляют собой однострочные значения, и каждый из них занимает 200 мс для выполнения readline().
"dumpsys telephony .registry" возвращает около 5000 строк и занимает 500 мс.
"dumpsys content | grep ^Account .." возвращает три или четыре строки и занимает 300 мсек.
У меня нет проблем с задержками, но в это время процессор сервера серьезно страдает. Отправка этих команд высоты увеличила нагрузку на процессор на 30%. Приложению необходимо одновременно контролировать различные устройства, и оно вызывает 100% пиковую нагрузку на ЦП при подключении всего лишь двух устройств.
Java-приложение не является проблемой, поскольку я воспроизвожу Влияние на процессор при отправке команд ADB из командной строки DOS.
Вещи, которые я пробовал, но никакой пользы не наблюдалось:
  • Отправка команд отдельно
  • Отправить одну строку из нескольких команд :
    adb shell command1 && adb shell command2 && adb shell command3 .."
  • Установите задержки между командами (10, 100, 200, 500 мс)
  • Используйте соединение ADB через Wi-Fi вместо USB
    Сравнение различных моделей и производителей устройств Android (Samsung, Google, ..)
  • Установлены новейшие инструменты платформы Android SDK:
>adb version
Android Debug Bridge version 1.0.41
Version 35.0.2-12147458
Installed as C:\Windows\SysWOW64\platform-tools\adb.exe
Running on Windows 10.0.19045

Изменить:
Комментарий Роберта и ответ Мартина Цейтлера предлагают включить все команды в один сеанс ADB. Я пробовал так:
tResult = adb_shell_method("command1 && echo WWW && command2 && echo WWW && ..");
resultArray = tResult.split("WWW");

Подобный сбор команд высоты занимает ~320 мс и загружает процессор менее чем на 5%.
Теперь я понимаю, что каждая «оболочка adb» исполнение сложнее, чем я думал. Поэтому было бы лучше создать один сеанс adb с устройством и использовать его, пока оно подключено.
Сбор данных из UE с помощью такого метода, как
String executeADBCommand(String command, ADBSession);


Подробнее здесь: https://stackoverflow.com/questions/793 ... er-windows
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»