在应用程序具有前景的同时保持android服务的活动性

在应用程序具有前景的同时保持android服务的活动性,android,sockets,service,Android,Sockets,Service,我有一个与游戏服务器保持套接字连接的服务。游戏需要与服务器进行频繁的双向通信,因此只要应用程序有前景,这个连接就应该保持打开状态。然而,由于保持连接打开是电池密集型的,我们希望尽可能友好,一旦应用程序离开前台(即用户返回主屏幕),我们就会终止连接 这一切都很接近成功,但我们遇到了一些小麻烦。每当游戏改变了活动(如偏好活动)时,连接就会断开。现在,我们可以让每个活动在暂停时断开连接,并启动负责此操作的服务,但这似乎不太理想,因为这将导致不必要的断开和重新连接。将服务停止绑定到onStop方法似乎也

我有一个与游戏服务器保持套接字连接的服务。游戏需要与服务器进行频繁的双向通信,因此只要应用程序有前景,这个连接就应该保持打开状态。然而,由于保持连接打开是电池密集型的,我们希望尽可能友好,一旦应用程序离开前台(即用户返回主屏幕),我们就会终止连接

这一切都很接近成功,但我们遇到了一些小麻烦。每当游戏改变了活动(如偏好活动)时,连接就会断开。现在,我们可以让每个活动在暂停时断开连接,并启动负责此操作的服务,但这似乎不太理想,因为这将导致不必要的断开和重新连接。将服务停止绑定到onStop方法似乎也不是最理想的,因为在用户离开游戏后,连接会保持很长时间


我们正在寻找的是一种在初始活动启动后不久的某个时间点启动服务的方法,并在应用程序处于前台时保持该服务运行。一旦用户离开应用程序,服务就会关闭

如果您只需要在应用程序处于前台时运行它(即,它的一项活动被显示),那么您并不真正需要服务。将您的连接管理器类设置为singleton,并按如下所述计算使用它的活动数:


Android中的服务是在您需要在没有UI的情况下运行时使用的,因此并不真正适合您的用例

这是一个很好的观点。然而,就我所知,它似乎仍然不能解决我面临的问题。连接管理器需要根据正在侦听的活动启动和关闭。第一个活动的onPause似乎在新活动的onResume之前被调用。这将导致每个交换机上的连接断开。对
onStop()
但是,当活动不再可见时,也就是说,另一个活动已经在前台,因此它应该可以工作时,应该调用它。在最后一个客户端断开连接后,您还可以将断开连接延迟几秒钟。