Android开发 强制退出了任务,后台显示服务还在,但是程序里面的Socket却中断了? 50
Android开发使用Socket实现推送服务,现在将程序部署到魅族手机上。1、手机已经手动设置为允许自启动了;2、在主线程HomeActivity调用触发了startS...
Android开发使用Socket实现推送服务,现在将程序部署到魅族手机上。1、手机已经手动设置为允许自启动了;2、在主线程HomeActivity调用触发了startService,服务使用的是IntentService,Socket存放在IntentService中。3、手机在运行或者点击Home键都是可以正常收到推送消息的,后台服务也在运行,Socket也未中断;但是当强制清除任务的时候,在应用管理中心可以看到应用还在运行,但是Socket已经中断,推送也收到不到了,请问怎么回事呢?
展开
1个回答
展开全部
因为,你把服务端进程关闭,已经与客户端建立好的tcp连接当前还没有完全关闭。当前服务端的tcp连接应该处于FIN_WAIT2状态,虽然该tcp连接已经与进程之间没有关系了(当前连接处于orphaned),但是操作系统还是会为这个连接维持内核的数据结构,而该连接的local port就是服务端的listen port,所以当你用socket去bind这个port的时候,操作系统会提示你说 Address already in use 。FIN_WAIT2状态的连接有定时器,应该和TIME_WAIT的时间长度相同,都是2MSL。超过了这段时间后,FIN_WAIT2的连接就会被操作系统移除。同样local port就不会被占用了,这样bind就能够成功了。
追问
我关闭的是客户端的Android程序,服务端的程序没有关闭啊。此时连接还会中断吗?那要如何在其中断的时候再次重连呢?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询