2011-08-08 86 views
3

我有一個與服務器通信的應用程序。當新數據可用於讀取時,我希望我的應用程序只讀取套接字的輸入流。如果新數據到達Android,從套接字讀取數據

目前,我創建了一個計時器,使用java.nio.channels的SocketChannel類每20ms(輪詢)讀取套接字的輸入流。這並不好,因爲即使沒有可用的數據,它也會讀取套接字。它可以快速排出電池。

是否有一個Android API會告訴或發送一個標誌到連接的客戶端,只要有新的數據可用,這樣它就是唯一一次我將讀取輸入流?

回答

2

請參閱this,但簡短的答案是否定的,沒有API。順便說一句,如果沒有數據可用,SocketChannel/Selector實際上不會讀取套接字,只需檢查它的狀態即可。

對於推送通知,您可能會檢查Android Cloud to Device Messaging Framework。 AFIAK,它以類似的方式實現:它們保持插座打開,並在可用時發送通知 。它很可能已經針對低電池使用情況進行了調整,並且是操作系統的一部分,因此可能值得一試(2.2及以上)。