【发布时间】:2011-04-21 01:15:07
【问题描述】:
刚刚在 Android 1.6 (Sony Xperia X10) 上遇到以下问题:当通过 ServerSocket.accept() 提供数据包时,在同一设备(例如 127.0.0.1:8080)的 WebView 中使用 XMLHttpRequest 请求数据时,XMLHttpRequest 有时会卡住.调试器告诉我,服务器实际上深入到ServerSocket.accept(),例如。他是否已送达或未收到最后一次请求。 WebViewCoreThread 卡在
Object.wait() line: 288
Request.waitUntilComplete() line: 381
RequestHandle.waitUntilComplete() line: 262
Network.requestURL(String, Map, byte[], LoadListener, boolean) line: 195
FrameLoader.handleHTTPLoad() line: 204
FrameLoader.executeLoad() line: 131
...
据说在等待它的是 http0 ... http3 线程,它们都在等待
Object.wait(long, int) line: not available [native method]
RequestQueue(Object).wait() line: 288
ConnectionThread.run() line: 93
首先我认为请求数据包丢失了。但这并不能解释为什么所有 http.. 线程都处于相同的等待位置,因为一个应该等待响应,而其他线程则等待来自 WebView 的新作业。有什么想法吗?
【问题讨论】:
-
前面提到的
http..线程的等待实际上是一个“等待工作”的位置。所以工人等待工作,而WebViewCoreThread等待他们的完成。似乎是一个错误。 -
这似乎确实是Android中的一个错误,我报告了。随着服务器响应延迟请求的增加,问题发生的次数越来越少,然后消失。所以也许这永远不会出现在真实的网络请求上,只能用 localhost 服务器重现。
标签: android localhost serversocket