uni-app 重启后剪贴板内容必然丢失,因iOS、Android、HarmonyOS均将剪贴板设计为进程级临时缓存,App冷启动或杀后台后上下文即清空;可行方案是复制时同步本地加密存储,启动时提示用户主动恢复。

uni-app 重启后剪贴板内容必然丢失,这是所有平台的系统级行为
APP 重启后剪贴板内容无法保留——这不是 uni-app 的限制,而是 iOS、Android、HarmonyOS 的统一设计。系统剪贴板本质是进程级临时缓存,App 进程终止(冷启动/杀后台/崩溃重启)后,其关联的剪贴板上下文即被清空。即使你用 uni.setClipboardData 写入成功,只要 App 进程结束,内容就没了。
为什么“重启保留”在技术上不可行
试图绕过这个限制的所有方案都会失败,原因很直接:
- iOS:剪贴板由 pasteboard service 管理,App 无权注册持久化监听或绑定生命周期;
UIPasteboard.general在 App 退出后自动失效 - Android:系统 ClipboardManager 不提供跨进程持久化能力;即使你用
plus.android调原生 API,写入的仍是当前会话 clipboard manager 实例,进程 kill 后实例销毁 - 鸿蒙:
ohos.miscservices.pasteboard.Pasteboard同样只维持在应用运行期间,不支持后台保活或持久存储 - uni-app 层面:没有 API 能 hook 系统剪贴板的持久化机制,也不存在“写入时指定保留策略”的参数
真正能落地的替代方案只有本地缓存 + 主动恢复
如果你需要“看起来像重启后还在”,只能放弃依赖系统剪贴板,改用本地持久化存储 + 用户主动触发恢复:
- 复制时,除了调用
uni.setClipboardData,同步把内容存进uni.setStorageSync或uni.setStorage - App 启动后(
onLaunch或首页onShow),读取本地缓存,判断是否为有效待恢复内容(比如加时间戳、加 type 标识) - 不自动写回剪贴板,而是 UI 上提示“检测到上次未使用的口令,是否恢复?”——用户点击后才调
uni.setClipboardData - 注意清理时机:恢复成功后立即
uni.removeStorageSync,避免重复恢复;若用户拒绝,则保留缓存直到下次主动操作
特别注意容易被忽略的坑
很多开发者尝试用定时器轮询 + uni.getClipboardData 持久监听,结果在真机上完全失效:
- iOS 14+ 和 Android 12+ 会阻止后台 App 访问剪贴板,
onHide后定时器可能被系统 suspend 或 kill,轮询根本不会执行 - 鸿蒙上即使声明了
ohos.permission.READ_PASTEBOARD,也无法在后台读取,且权限仅限前台焦点窗口 - H5 完全不支持
uni.getClipboardData,更别说持久化监听 - 缓存敏感内容(如验证码、token)必须加密存储,不能明文落盘;建议用
uni.encrypt或 AES 加密后再存
剪贴板从来就不是数据库,它只是个临时中转站。想让它“跨重启存在”,等于要求快递员把包裹留在你家门外等你半年——系统不会干这事,得你自己建个储物柜。


















