Android如何建立WebSocket连接 安卓App实时消息传输代码【案例】

老芳大大_5649

老芳大大_5649

2026-06-05

490人浏览

原创

okhttpclient 最稳:回调在后台线程、自带连接池与dns缓存、异步建连;java-websocket易卡主线程且需手写重连;androidasync已停更且tls1.3兼容差。

android如何建立websocket连接 安卓app实时消息传输代码【案例】

用 OkHttpClient 建立 WebSocket 连接最稳,Java-WebSocket 容易卡主线程、AndroidAsync 已停止维护 —— 别踩这两个坑。

选 OkHttp 还是 Java-WebSocket?看这三点

选库不是看文档多不多,是看它怎么处理异常、线程和重连:

  • OkHttpClient:所有回调都在后台线程,onMessage 不会阻塞 UI;自带连接池和 DNS 缓存;newWebSocket() 返回即异步启动,不阻塞调用方
  • Java-WebSocket:默认使用 connectBlocking() 会卡死主线程(哪怕你在子线程调用,它内部仍可能抛 IllegalThreadStateException);心跳、重连得自己手写,容易漏掉 onError 中的断连兜底
  • AndroidAsync:最新版停留在 2019 年,websocket() 方法在 Android 12+ 上因 TLS 1.3 兼容问题频繁报 javax.net.ssl.SSLHandshakeException

OkHttp WebSocket 必须配的三件事

只写 client.newWebSocket(request, listener) 肯定连不上,漏掉任一都会静默失败:

Android Adb Skill
Android Adb Skill

Android 开发调试技能,通过系统 ADB 工具操作 Android 设备。以下场景必须触发此技能:(1) 直接 ADB 操作——安装 APK、查看设备列表、抓取 logcat 日志、查看已安装应用、清除应用数据、截图、重启设备、拉取/推送文件、查看 CPU/内存/电池信息、adb shell 操作;(2)...

下载
  • Manifest 里必须有 <uses-permission android:name="android.permission.INTERNET"></uses-permission> —— 没它连 ws:// 都会直接抛 IOException: Cleartext HTTP traffic not permitted
  • URL 必须用 ws:// 或 wss://,不能写成 http://;如果后端是 Nginx 反代,确保配置了 proxy_http_version 1.1 和 proxy_set_header Upgrade $http_upgrade
  • WebSocketListener 的 onFailure 里必须手动触发重连逻辑 —— OkHttp 不自动重连,且 onClose 不代表连接断开(比如网络闪断时只走 onFailure)

发送消息前先确认连接状态

webSocket.send() 不会校验连接是否存活,发出去就丢,服务器收不到也不报错:

  • 每次发消息前查 webSocket.isClosed() == false && webSocket.isClosing() == false,否则直接跳过
  • 别依赖 onOpen 后就“一定可用”——某些弱网场景下 onOpen 触发后几毫秒内连接就断了,但 onClose 还没来得及回调
  • 文本消息建议加简单校验:if (text != null && !text.trim().isEmpty()) webSocket.send(text),避免空字符串触发服务端解析异常

心跳和重连不能只靠 onOpen/onClose

真实网络环境里,NAT 超时、运营商劫持、WiFi 切换都会让连接“假活”——看起来没断,其实发包已丢:

  • 心跳必须用 webSocket.send() 发真实帧(比如 "ping"),不能只靠 PingFrame —— 多数安卓设备的底层 WebSocket 实现不转发 Ping/Pong 帧给应用层
  • 重连间隔要指数退避:1s → 2s → 4s → 8s,避免瞬间重连风暴打崩服务器
  • 重连前清掉旧 webSocket 引用并调 webSocket.cancel(),否则旧连接残留可能占用 socket fd 导致 IOException: Too many open files

真正难的不是连上,是连上之后怎么判断“它还活着”。很多崩溃日志里出现的 NullPointerException 都是因为在 onFailure 里没及时置空 webSocket 引用,结果定时心跳还在往一个已销毁的对象发消息。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

android websocket

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
android开发三大框架
android开发三大框架

android开发三大框架是XUtil框架、volley框架、ImageLoader框架。本专题为大家提供android开发三大框架相关的各种文章、以及下载和课程。

2023.08.14

882

4

android是什么系统
android是什么系统

Android是一种功能强大、灵活可定制、应用丰富、多任务处理能力强、兼容性好、网络连接能力强的操作系统。本专题为大家提供android相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.22

2547

5

android权限限制怎么解开
android权限限制怎么解开

android权限限制可以使用Root权限、第三方权限管理应用程序、ADB命令和Xposed框架解开。详细介绍:1、Root权限,通过获取Root权限,用户可以解锁所有权限,并对系统进行自定义和修改;2、第三方权限管理应用程序,用户可以轻松地控制和管理应用程序的权限;3、ADB命令,用户可以在设备上执行各种操作,包括解锁权限;4、Xposed框架,用户可以在不修改系统文件的情况下修改应用程序的行为和权限。

2023.09.19

4797

7

android重启应用的方法有哪些
android重启应用的方法有哪些

android重启应用有通过Intent、PendingIntent、系统服务、Runtime等方法。本专题为大家提供Android相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.18

605

5

Android语音播放功能实现方法
Android语音播放功能实现方法

实现方法有使用MediaPlayer实现、使用SoundPool实现两种。可以根据具体的需求选择适合的方法进行实现。想了解更多语音播放的相关内容,可以阅读本专题下面的文章。

2024.03.01

924

5

Golang WebSocket与实时通信开发
Golang WebSocket与实时通信开发

本专题系统讲解 Golang 在 WebSocket 开发中的应用,涵盖 WebSocket 协议、连接管理、消息推送、心跳机制、群聊功能与广播系统的实现。通过构建实际的聊天应用或实时数据推送系统,帮助开发者掌握 如何使用 Golang 构建高效、可靠的实时通信系统,提高并发处理与系统的可扩展性。

2025.12.22

175

11

PHP WebSocket 实时通信开发
PHP WebSocket 实时通信开发

本专题系统讲解 PHP 在实时通信与长连接场景中的应用实践,涵盖 WebSocket 协议原理、服务端连接管理、消息推送机制、心跳检测、断线重连以及与前端的实时交互实现。通过聊天系统、实时通知等案例,帮助开发者掌握 使用 PHP 构建实时通信与推送服务的完整开发流程,适用于即时消息与高互动性应用场景。

2026.01.19

396

22

Python WebSocket实时通信与异步服务开发实践
Python WebSocket实时通信与异步服务开发实践

本专题聚焦 Python 在实时通信场景中的开发实践,系统讲解 WebSocket 协议原理、长连接管理、消息推送机制以及异步服务架构设计。内容包括客户端与服务端通信实现、连接稳定性优化、消息队列集成及高并发处理策略。通过完整案例,帮助开发者构建高效稳定的实时通信系统,适用于聊天应用、实时数据推送等场景。

2026.03.18

675

14

WebSocket 前端开发与实战技巧
WebSocket 前端开发与实战技巧

聚焦 WebSocket 在前端项目中的工程化实践,涵盖原生 JavaScript WebSocket 连接的封装与状态管理、Vue 3 中 WebSocket 的 Composable 封装(useWebSocket)、React 中自定义 Hook 管理连接生命周期、心跳检测(Ping/Pong 定时器)与自动断线重连的实现策略、指数退避重连算法、消息序列化协议(JSON / Protobuf / MessagePack)的选型与性

2026.05.25

408

33

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Excel 教程
Excel 教程

共162课时 | 43.8万人学习

Java 教程
Java 教程

共578课时 | 189.2万人学习

Uniapp从零开始实现新闻资讯应用
Uniapp从零开始实现新闻资讯应用

共64课时 | 9.4万人学习