Я использую OkHttp (сначала оригинальную версию, затем я обновил до OkHttp3), некоторые пользователи моего приложения сообщают о значительной потери времени работы от батареи, когда приложение не работает.Аномальное использование ЦП - Okio Watchdog
Я побежал профилировщика и это результат:
Как вы можете видеть, Окио Watchdog работает все время. Примерно на полпути мое приложение полностью находится в фоновом режиме. На данный момент HTTP-задачи не выполняются. Я начал профилирование после завершения последней задачи HTTP.
Нормально ли, что сторожевой таймер работает повсюду? Если это так, я прав, полагая, что эта нить вызывает много отработанных батарей? Если это не нормально, может ли что-то вроде утечки Context держать Watchdog?
В Watchdog code работает здесь, похоже, прогоны без условия завершения:
private static final class Watchdog extends Thread {
public Watchdog() {
super("Okio Watchdog");
setDaemon(true);
}
public void run() {
while (true) {
try {
AsyncTimeout timedOut = awaitTimeout();
// Didn't find a node to interrupt. Try again.
if (timedOut == null) continue;
// Close the timed out node.
timedOut.timedOut();
} catch (InterruptedException ignored) {
}
}
}
}
Вам удалось воспроизвести это вообще? – Knossos
Я еще не исследовал, если честно. Сегодня, надеюсь. –