我有一个WebView
通过ServerSocket
本地主机上的后台线程提供的。这很好用,但有时后台线程会随机停止接受请求(“网页不可用”)。一段时间后,它再次工作而没有任何变化,即无需重新启动线程或套接字或accept()
再次调用。
编辑2:进一步调查表明,WebView
似乎有一个(单独的?)本地主机连接的超时值非常小,以至于有时服务器线程没有机会处理请求。作为一种解决方法,我可以在WebClient.onReceivedError
调用时重新加载页面,最终加载页面。有人有同样的问题吗?
当我打开调试器时,我可以看到服务器线程仍在正常运行,并且在ServerSocket.accept()
方法(或者更准确地说,在)中等待(阻塞OSNetworkSystem.accept(...)
)。但是,accept()
似乎没有收到传入的请求。
我的代码没有什么特别的:
ServerSocket serverSocket = new ServerSocket(port);
serverSocket.setSoTimeout(0);
while (!shutdown) {
Socket socket = null;
try {
socket = serverSocket.accept();
// Parse request and create response
} catch (Exception e) {
// ...
} finally {
// ... close socket
}
}
我在 Windows/Mac 上使用相同的代码,从未遇到过任何此类问题。
在我看来,这似乎是 Android 中的一个错误,可能与电源管理优化有关。有什么线索吗?
编辑:该问题不会出现在 Android 2.x 上,仅出现在 Android 3.1(三星 Galaxy Tab 10.1)上。