ClipCascade v1.13 - Android 接收稳定性与移动端同步体验大更新
发布说明
本次更新重点修复 Android 端在多设备剪贴板同步时出现的接收异常、历史记录延迟刷新、频繁登录和手动重连体验不清晰等问题。
此前在 Windows、macOS、Android 三端同时在线时,Android 端可能出现:
- 连续复制多条内容时,手机端只收到部分内容
- 手机端看起来像每隔数秒才同步一次
- 服务端日志频繁出现 Android 触发的 /login
- 历史记录依赖 1.5 秒轮询刷新,收到内容后不够实时
- “启动同步服务”按钮在已连接状态下作用不明确
修复内容
[fix] Android 端接收回调切换到主线程处理
- client-android-native-shell/android/app/src/main/java/com/clipcascade/android/ClipCascadeBackgroundService.kt
- Go WebSocket 读线程不再直接操作 Android 悬浮窗、系统剪贴板和历史记录
- 收到文本消息后通过 Handler(Looper.getMainLooper()) 切回主线程写入系统剪贴板
- 避免 WebSocket 读循环被 Android 剪贴板写入流程阻塞,改善连续复制时的漏收和延迟表现
[fix] Android 历史记录改为事件驱动刷新
- 新增 ACTION_HISTORY_CHANGED 广播
- 后台服务写入发送/接收历史后立即通知主界面刷新
- 移除原来的 1.5 秒历史轮询刷新
- 收到剪贴板更新后,历史列表能更实时显示,不再依赖定时器
[fix] Android 大文件列表 API 会话复用
- 新增 ApiSessionManager
- 大文件列表刷新、请求下载、文件下载复用同一 API session cookie
- 只有遇到 401/403 时才清理 cookie 并重新登录
- 避免大文件页轮询导致服务端日志持续出现 Android /login
[fix] Android 大文件轮询只在大文件页生效
- 大文件列表刷新循环只在“大文件”标签页可见时请求服务端
- 停留在普通剪贴板历史页时不再每 8 秒请求 /api/files/deferred
- 降低服务端日志噪声和移动端无意义网络请求
[ux] “启动同步服务”改为“重连同步服务”
- 按钮现在会先停止旧后台服务,再重新启动同步服务
- 已连接但状态异常时,可以手动重建 WebSocket 连接和后台服务
- 按钮行为更符合实际用途,不再只是重复启动已运行的 service
[test] 增加 Android API session 回归测试
- 覆盖同账号复用 cookie
- 覆盖 401/403 后重新登录
- 覆盖服务器或账号配置变化后重新登录
影响范围
- Android 原生客户端:重点修复接收异常、历史刷新和重连体验
- Windows 桌面端:无需改动,但连续复制到 Android 的稳定性受益
- macOS 桌面端:无需改动,但连续复制到 Android 的稳定性受益
- 服务端:无需协议改动,减少 Android 客户端重复登录请求
编译验证
cd client-android-native-shell/android
./gradlew :app:testDebugUnitTest :app:compileDebugKotlin
cd ../../../client-desktop
go test ./...
记录人:Codex