我正在使用okhttp(首先是最初的verison,然后我升级到okhttp3),我的应用程序的一些用户在应用程序不运行时报告了严重的电池寿命损失。
我运行了一个分析器,结果是:
如你所见,Okio Watchdog一直在运行。在大约一半的时候,我的应用程序完全在后台。此时没有发生http任务。上次http任务结束后,我开始分析。
看门狗这样跑来跑去是正常的吗?如果是这样的话,我是不是认为这个线程会造成大量的电池浪费?如果这不正常,像泄漏的上下文会让监视程序继续运行吗?
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) {
}
}
}
}
最佳答案
在奥基奥看来是一个严重的意外错误。我试着复制和修复。如果你能始终如一地产生这个错误,请评论这个错误!
https://github.com/square/okio/issues/185