Я использую OkHttp (сначала исходную версию, затем я обновил ее до OkHttp3), некоторые пользователи моего приложения сообщают о значительном снижении времени автономной работы, когда приложение не работает.
Запустил профайлер и вот результат:
Как видите, Okio Watchdog работает все время. Примерно на полпути мое приложение полностью находится в фоновом режиме. В данный момент нет задач HTTP. Я начал профилировать после завершения последней HTTP-задачи.
Это нормально, что Сторожевой Пёс так бегает по всему миру? Если да, то прав ли я, предполагая, что эта тема приводит к большому расходу батареи? Если это не нормально, может ли что-то вроде утечки контекста поддерживать работу Watchdog?
сторожевой код выполняется здесь кажется, что он работает без условия завершения:
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) {
}
}
}
}