由于业务需要,Android客户端(以下简称Client)与服务端(以下简称Server)是用TCP长连接,通讯机制如下:
1. Client每隔50杪向Server发送一次心跳包,Server收到此心跳包后自动回应一个心跳响应包给Client,Server如果在65秒内没有收到任何Client的消息(包括心跳包消息),就会判定TCP连接超时,会自动断开与Client的TCP长连接。
2. Client如果超过90秒没有收到Server发送过来的任何消息,也会自动断开与Server的连接,然后启动重连Server线程。
以上操作是放在一个后台服务中的线程运行,这个服务由主Activity启动,当APP退出后,这个服务也会停止。
现在的问题是:如果不锁屏,Client与Server之间的通讯没有任何问题,当锁屏后(此时APP没有退出),Server就接收不到Client的心跳包了,Server判定连接超时,断开连接,奇怪的是大概过了4分钟左右Client又重连上了Server,但是接着Server还是会判定连接超时,如此反复。当Client锁屏取消(按电源键将屏幕点亮)后,Client又会自动连上Server了。这是什么原因呢?按照以上的现象锁屏后服务应该没有被kill,而是socket发送被阻塞了,有什么解决办法呢?