java - 在 Android 中持续运行 Socket.io 服务

标签 java android sockets socket.io chat

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

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

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

最佳答案

当您的应用程序启动时,您应该运行一项服务(例如 ListenerService),并且在该服务内您必须启动一个线程(例如 ListenerThread)。并保持该线程和服务处于 Activity 状态,直到您的应用程序处于 onResume()/onPause() 状态。通过该线程将您的客户端套接字连接到服务器。并接收 ListenerThread 上的所有更新。如果您想向服务器发送一些数据包,请在另一个线程/处理程序(例如 tempThread)上发送,并在发送请求后关闭该线程。
当您的应用程序关闭/退出时,停止该服务(例如 ListenerService)。在该服务中,您必须 hibernate ListenerThread。 不要尝试停止线程有关线程的更多信息,您可以关注 this链接和 this关联。 Android 从 API 级别 1 开始已弃用 Thread.stop(),请参阅 document 。 使用 START_STICKY 启动服务(ListenerService)。作为引用,请参阅 android documention服务内容

关于java - 在 Android 中持续运行 Socket.io 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34404728/

相关文章:

java - 数组变量 "might not have been initialized"

android - 如何从 Android NDK .so 文件中去除符号?

java - 为什么我在使用Eclipse(Android)时仍然无法使用fragment?

c - tcp 服务器未绑定(bind)到特定端口

java - 根据运行时条件启用Aspect代理,Spring AOP?

java - 如何在 JSqlParser 上处理 '[ ] -' 字符

java - Android:Html TextView - 这可能吗?

C TCP Server 关闭前不发送数据

c++ - 关于一般网络编程中的write buffer

java - 如果可以通过反射绕过访问修饰符,那么访问修饰符的目的是什么?