Android开发 强制退出了任务,后台显示服务还在,但是程序里面的Socket却中断了? 50

Android开发使用Socket实现推送服务,现在将程序部署到魅族手机上。1、手机已经手动设置为允许自启动了;2、在主线程HomeActivity调用触发了startS... Android开发使用Socket实现推送服务,现在将程序部署到魅族手机上。1、手机已经手动设置为允许自启动了;2、在主线程HomeActivity调用触发了startService,服务使用的是IntentService,Socket存放在IntentService中。3、手机在运行或者点击Home键都是可以正常收到推送消息的,后台服务也在运行,Socket也未中断;但是当强制清除任务的时候,在应用管理中心可以看到应用还在运行,但是Socket已经中断,推送也收到不到了,请问怎么回事呢? 展开
 我来答
在晴天的雨伞
2016-05-16 · TA获得超过6869个赞
知道大有可为答主
回答量:5761
采纳率:86%
帮助的人:1244万
展开全部
因为,你把服务端进程关闭,已经与客户端建立好的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程序,服务端的程序没有关闭啊。此时连接还会中断吗?那要如何在其中断的时候再次重连呢?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式