2015-12-21 70 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会杀死你的后台任务。