2014-03-28 49 views
1

我在後臺運行的是Android服務,它會使用此代碼:SocketServer.Accept()影響?

while(true) 
{ 
    ServerSocket server = new ServerSocket(1234); 
    Socket server_socket = server.accept(); 
} 

請問如果它停在server.accept();,直到客戶端連接到服務這個循環影響電池的壽命?

我閱讀了文檔,但我無法找到關於accept();如何等待請求的明確答案。

如果這不是讓android設備等待套接字連接請求的最佳方法,那麼有人可以將光照放在更好的設備上嗎?

+1

它應該是一個阻塞調用,所以不要浪費CPU週期。更重要的是,沒有任何東西可以阻止手機進入睡眠狀態 - 儘管如果您希望該程序有用,您可能需要補充一點 - 如果您確實需要這樣做,那麼*會花費一些東西,特別是如果您還必須保持wifi活躍。 –

+0

@ChrisStratton實際上我在應用清單中有這樣的:''所以一旦wifi打開,服務就會啓動,一旦wifi被關閉,服務就會停止用戶。這是否有負面影響? – OmarBizreh

回答

2

accept()是一個阻塞呼叫。
你可以控制它的塊多長時間通過設置http://download.java.net/jdk7/archive/b123/docs/api/java/net/ServerSocket.html#setSoTimeout(int)

在你的代碼,你接受它,你儘快處置Socket server_socket = server.accept();的。我希望事實並非如此,你實際上開始了一個線程來處理連接

+0

是的,處理將使用AsyncTask完成。但是,一旦接收到WiFi狀態變化,服務會運行一次,檢查它是否打開,一旦它接收到另一個WiFi狀態,檢查WiFi是否關閉,服務將自行停止。如果只要wifi處於打開狀態,就會調用'accept();'來影響電池壽命? – OmarBizreh

+1

我無法告訴你'accept()'是如何在硬件級別上實現的。它可以很容易地實現等待請求使用很少的權力,但仍可能掃描其他設備... –

+0

謝謝,我會完成我的應用程序,做測試和收集Android生成的電池壽命數據。 順便說一句,「你可以很容易地實現等待請求使用很少的權力」是什麼意思? – OmarBizreh