锁屏后Socket不能发送心跳消息

Pigeon汪 2015-12-21 03:29:28
由于业务需要,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发送被阻塞了,有什么解决办法呢?
...全文
564 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
曦阳_jingjing 2016-06-25
  • 打赏
  • 举报
回复
楼主,请问您的问题,解决了吗?我最近有遇到这样的问题,求指教?
哎,真难 2015-12-21
  • 打赏
  • 举报
回复
service在启动中不,打印看下
sanxiaochengyu 2015-12-21
  • 打赏
  • 举报
回复
那要客户端和服务器端多打印点日志,看看是锁屏多久断开,是Client 没发数据,还是Client发了数据Server没收到 亦或是server收到数据没有返回,或者Server返回了,Client没收到
Pigeon汪 2015-12-21
  • 打赏
  • 举报
回复
引用 3 楼 a87b01c14 的回复:
用的WIFI 么,系统设置里面把WIFI 改成永不休眠
引用 4 楼 ghchen 的回复:
看看这个设置: 1. 进入 设置——无线和网络——WLAN设置 2. 按菜单键(meun)——选择高级 3. WLAN休眠策略——永不休眠 或者有没有装什么应用,在锁屏的时候关闭网络
WIFI已经设置过永不休眠,在2部不同品牌的手机上测试过,不管是WIFI还是2G网络状态下,都有这个问题
ghchen 2015-12-21
  • 打赏
  • 举报
回复
看看这个设置: 1. 进入 设置——无线和网络——WLAN设置 2. 按菜单键(meun)——选择高级 3. WLAN休眠策略——永不休眠 或者有没有装什么应用,在锁屏的时候关闭网络
sanxiaochengyu 2015-12-21
  • 打赏
  • 举报
回复
用的WIFI 么,系统设置里面把WIFI 改成永不休眠
Pigeon汪 2015-12-21
  • 打赏
  • 举报
回复
引用 1 楼 C_S_D_N_LHT 的回复:
我觉得你的问题可能是,在锁屏后,系统休眠了,这样的话,cpu是不工作的,也就是说你的线程也停了。
但是在锁屏的时候,Client也会偶尔重连上Server哦!
C_S_D_N_LHT 2015-12-21
  • 打赏
  • 举报
回复
我觉得你的问题可能是,在锁屏后,系统休眠了,这样的话,cpu是不工作的,也就是说你的线程也停了。

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧