持续 运行 Socket.io 服务于 Android

Continuously Running Socket.io Service in Android

我正在开发一个聊天客户端,使用 Socket.io 作为与服务器通信的方式。因此,使用 GCM 并不完全是一种选择。

我希望能够随时接收聊天(即使应用程序已关闭);本质上,套接字需要始终处于监听状态。我知道可以在 phone 启动并保持 运行 时启动服务。然而,这在移动设备上似乎是一个相当糟糕的主意,会耗尽电池等。

经过研究,GCM 似乎是此类问题最常见的实现方式。不幸的是,我目前无法替换 Socket.io。我想知道我将如何实现这种聊天设计 - 在后台监听一个套接字。

当您的应用程序启动时,您应该 运行 一项服务(例如 ListenerService),并且在该服务中您必须启动一个线程(例如 ListenerThread)。并保持该线程和服务处于活动状态,直到您的应用程序处于 onResume()/onPause() 状态。通过该线程将您的客户端套接字连接到服务器。并接收 ListenerThread 上的所有更新。如果你想发送一些数据包到服务器然后发送另一个thread/handler(例如tempThread)并在发送请求后关闭那个线程。
当您的应用程序 close/exit 然后停止该服务(例如 ListenerService)。在该服务中,您必须睡眠 ListenerThread。 不要尝试停止线程以获取有关线程的更多信息,您可以关注 this link and this link. Thread.stop() is deprecated in android from API level 1, please see document。 使用 START_STICKY 启动服务 (ListenerService)。参考请参考 android documention of service

GCM 是处理此问题的正确方法。将 GCM 警报发送到设备,然后用户可以单击它来打开您的应用程序。那时您可以重新打开套接字并获取所需的数据。

如果您曾计划将您的应用程序部署到 iOS,这就是您将采用的路线。 iOS 如果需要,5 分钟或更短时间后终止您的后台任务。