我有一個是從後臺線程通過在localhost一個ServerSocket
饋送的WebView
。這工作得很好,但有時後臺線程會隨機停止接受請求(「網頁不可用」)。一段時間後,它會再次運行而不做任何更改,即不重新啓動線程或套接字或再次調用accept()
。的Android:的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)上。
什麼包含在你的問題的代碼?你是否在Activity中運行serverSocket? – elevine
@elevine:serverSocket在另一個線程中運行,從Activity內部啓動。它不作爲服務運行。 –
你能顯示更多你的活動代碼嗎?線程是如何創建的以及從哪裏開始的? – elevine