讲师中心 微信公众号
AI工具推荐 视频效率加速

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

老芳大大_5649

老芳大大_5649

发布时间:2026-06-05 18:24:01

|

490人浏览过

|

来源于php中文网

原创

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"/> —— 没它连 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 引用,结果定时心跳还在往一个已销毁的对象发消息。

热门AI工具

更多
WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

Seko
Seko Hot

一款AI视频创作工具,主要用于商汤科技推出的创编一体的AI短视频创作Agent,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

讯飞智作

讯飞智作是一款AI视频创作工具,AI文本配音工具,数字人课程、营销视频制作。

二狗PPT
二狗PPT Hot

一款AI演示文稿工具,主要用于专为中式职场打造的AI PPT生成工具,适合需要提升相关任务效率的用户。

UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

火山引擎

火山引擎是一款面向企业的云计算与AI服务平台。

相关专题

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

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

882

2023.08.14

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

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

2567

2023.08.22

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

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

4797

2023.09.19

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

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

605

2023.10.18

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

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

924

2024.03.01

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

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

175

2025.12.22

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

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

396

2026.01.19

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

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

675

2026.03.18

LLVM自定义Pass怎么写
LLVM自定义Pass怎么写

本专题聚焦LLVM自定义Pass开发,整理Pass类结构、run()方法、PreservedAnalyses、CMake构建、插件注册、-load-pass-plugin加载和测试用例编写流程。

80

2026.09.30

热门下载

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

精品课程

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

共162课时 | 43.9万人学习

Java 教程
Java 教程

共578课时 | 189.4万人学习

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

共64课时 | 9.5万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn