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

不谢邀,1. IntentService 是用于执行单个或多个短时间的任务队列,不适合用于保持 socket 通讯。请使用 service。2. 在任务管理器内划掉后系统会模拟低内存状态对你的整个 process 来一次回收重建,因此即便显示的是还在后台,service 也已经重启了(onGoing 之类除外不过目测你并没有做类似操作)。3. 各个国产 ROM 都有各种不同的策略来阻止应用长期在后台运行,自己写一套推送渠道可以说是经典的脏活了,没有特殊需求的话请直接对接各种三方 push 渠道。
■网友
1.IntentService适合执行一次任务就退出的场景;2.清除任务时,请在Service关键生命周期打印log(onCreate,onDestory,onTaskRemoved),如果Service重新create,socket是否重新建立?推送服务有很多坑:1.Service长期驻存后台,如果被killed要有重启机制(不要用太流氓的方式),特殊机型引导用户加入白名单;2.Socket保活要有断线重连、心跳机制,否则Android系统待机情况下(屏幕灭)了CPU会休眠,导致超时后服务器端主动断开连接;3.心跳机制要结合AlarmManger+WakeLock使用,处理完任务及时释放,否则会导致耗电较高;4.Android4.4之后系统调整了电源算法,AlarmManager repeat会不准确,要采用注册一次,等收到触发后重新注册,依次循环的方式,并且心跳时间不要太短,比如5秒钟一次心跳,放置几个小时候,会被系统强制拉长到5分钟左右不等。5.另外注意WIFI休眠策略,是否始终保持连接。


    推荐阅读