我正在编写一个使用TCP套接字连接的客户端 - 服务器应用程序。在我的android项目中,Service创建了一个用于侦听TCP套接字的线程。
一切似乎都好。但我有一个问题..我的网络服务在后台运行良好;但是一段时间后(10-15分钟......),当我再次尝试打开我的应用程序(主要活动)时,我无法从套接字连接获得响应。它冻结还是什么?我无法从套接字发送或获取TCP消息..这可能是什么原因?我正在通过3G连接开通手机。
(此外,在模拟器中运行的应用程序没有遇到这样的问题;我认为它的连接是稳定的,很长时间)
感谢您的回答。
答案 0 :(得分:1)
由于功率优化以及可能的连接变化(GPRS / HSDPA / Wifi),您的连接很可能会被丢弃。
为了维持连接,您的后台服务需要使用PowerManager类声明唤醒锁。这可以防止设备进入省电模式,从而断开插座。但请注意,这会显着降低设备的电池寿命。
此外,您需要处理断开打开连接的连接更改。 Android发出名为 android.net.conn.CONNECTIVITY_CHANGE 的广播消息,以通知连接的变化。
根据您的使用情况,我会在设备处于睡眠模式时进行轮询,仅在设备正在使用时构建连接或仅使用C2DM推送通知
答案 1 :(得分:0)
当我在我的应用程序中遇到类似这样的事情时,通常是因为手机上的电源优化(无法覆盖)。如果套接字空闲时间过长,它将自动关闭,需要重新打开。
答案 2 :(得分:0)
您是否不时发送数据?像实施心跳协议一样?如果你不是,你应该...或者它可能与套接字READ / WRITE TIMEOUT
有关