我正在使用 OkHttp(首先是原始版本,然后我升级到 OkHttp3),我的应用程序的一些用户在应用程序未运行时报告了显着的电池寿命损失。
我运行了一个分析器,结果如下:
如您所见,Okio Watchdog 一直在运行。在大约一半的时候,我的应用程序完全在后台。此时没有发生 HTTP 任务。我在最后一个 HTTP 任务结束后开始分析。
看门狗这样跑是正常的吗?如果是这样,我是否正确地假设这个线程导致了大量的电池浪费?如果它不正常,像泄露的上下文这样的东西可以让看门狗继续运行吗?
看门狗代码在这里运行,似乎在没有终止条件的情况下运行:
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) {
}
}
}
}