Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

推送 / 长连接 / 保活

☆ 推送、长连接和保活经常和 Android 后台限制、厂商策略、功耗合规一起考。你的风控/对抗经验可以讲“知道边界、尊重系统、用监控验证“。

一、三类实时方案

方案优点缺点适用场景
轮询简单耗电、实时性差低频状态刷新
长轮询兼顾兼容性服务端连接占用简单实时通知
WebSocket/TCP 长连接实时、双向心跳、重连、保活复杂IM、协作、行情

二、WebSocket 心跳与重连

心跳不是越频繁越好。移动端要在实时性、功耗、网络切换、后台限制之间取舍。

sealed class SocketState {
    object Disconnected : SocketState()
    object Connecting : SocketState()
    object Connected : SocketState()
    data class Backoff(val retryAfterMs: Long) : SocketState()
}

重连策略:指数退避 + 网络恢复触发 + 前后台状态感知 + 最大重试保护。

三、系统推送:FCM 与国内厂商通道

  • 海外优先 FCM。
  • 国内通常接入小米/华为/OPPO/vivo/荣耀等厂商推送。
  • 应用内长连接适合前台实时,系统推送适合后台触达。

四、Android 后台限制与保活边界

Android 8.0 以后后台 Service、隐式广播、后台执行都有严格限制。面试要强调合规策略:前台服务、WorkManager、厂商推送、用户可见任务,而不是无限拉活。

五、进程保活与拉活的现实策略

历史方案包括双进程守护、1 像素 Activity、JobScheduler、账号同步、厂商白名单等,很多已被系统或厂商限制。中级面试更看重你能否说明风险:耗电、合规、用户体验、应用商店审核。

六、排障与监控

关注连接成功率、平均在线时长、心跳超时、重连次数、消息到达率、厂商通道回执。

高频面试题

Q1:IM 为什么不能只靠推送? 答:推送适合后台触达,不保证强实时和完整双向通信;前台聊天通常需要长连接保证低延迟、顺序和 ACK。

Q2:心跳间隔怎么定? 答:根据 NAT 超时、服务端成本、功耗和业务实时性实验确定,并区分前后台/网络类型,不能拍脑袋固定 5 秒。

Q3:怎么回答保活问题才安全? 答:讲系统允许的前台服务、WorkManager、厂商推送和业务必要性;历史黑科技可以说明了解但不建议作为长期方案。

易错点 / 追问

  • 不要承诺后台永远在线。
  • 不要忽略厂商 ROM 差异。
  • 不要把推送到达率问题全归因于客户端。