2015-12-21 69 views
0

我正在開發一個使用Socket.io作爲與服務器通信方式的聊天客戶端。因此,使用GCM不完全是一種選擇。在Android中連續運行Socket.io服務

我希望能夠隨時接收聊天(即使應用程序已關閉);基本上插座需要一直在聽。我瞭解,在手機啓動並繼續運行時,可以啓動服務。然而,這對移動設備來說似乎是一個相當糟糕的想法,電池耗盡等等。

研究表明,GCM似乎是這類問題最常見的實現。不幸的是,我目前無法取代Socket.io。我想知道如何去實現這個聊天設計 - 在後臺監聽一個套接字。

回答

1

您應該在應用程序啓動時運行一個服務(例如ListenerService),並且在該服務中您必須啓動一個線程(例如,ListenerThread)。並保持該線程和服務活動,直到您的應用程序在onResume()/ onPause()。通過該線程將客戶端套接字連接到服務器。並接收ListenerThread上的所有更新。如果你想發送一些數據包到服務器,然後發送另一個線程/處理程序(例如tempThread)並在發送請求後關閉該thrad。
當您的應用程序關閉/退出時,然後停止該服務(例如ListenerService)。在那個服務中,你必須睡眠ListenerThread。 不要試圖停止線程的更多信息關於線程,你可以按照this鏈接和this鏈接。 Thread.stop()已從API級別1的android中棄用,請參閱document。 用START_STICKY啓動服務(ListenerService)。供參考請參考android documention服務

+1

感謝您的回答。然而,我正在尋找的是一種讓套接字始終監聽的方式,即使應用程序已關閉。因此,如果有人向用戶發送聊天消息,即使用戶沒有直接使用應用程序,也可以通知用戶。從我看到的情況來看,您的解決方案並未解決這個問題。 – DaPasta

+0

如果即使應用程序已關閉,您也想獲得聊天消息,請不要停止服務(ListenerService),也不要停止線程。 –

+0

只需像其他應用程序(WhatsApp,Gmail等)一樣在後臺運行。但在運行螺紋或開放插座端口時不斷排出設備電池。 –

0

GCM是正確的處理方法。將GCM警報發送到設備,然後用戶可以點擊它來打開您的應用程序。那時您可以重新打開您的套接字並獲取所需的數據。

如果您打算將應用程序部署到iOS,那麼您將在此處使用該路線。如果覺得它像5分鐘或更短的時間,iOS會殺死你的後臺任務。