Android 复制完内容后会监听到多次剪贴板变化该怎么办?(onPrimaryClipChanged方法会执行多次)

最近看到剪贴板数据监听会多次回调的问题,上网搜了下发现大家都是通过判断两次收到回调的时间间隔来判断的。觉得这种方式有点走偏门的感觉,于是研究了下这块,得出了以下的总结:

第一步:请检查你是否重复添加了该Listener,例如这样:

复制代码
ClipboardManager clipboardManager = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
clipboardManager.addPrimaryClipChangedListener(listener);
clipboardManager.addPrimaryClipChangedListener(listener);

如果你多次添加该Listener,你会发现当有复制内容时,会收到很多次回调。

第二步:如果没有上述问题,请使用如下方式规避:

复制代码
ClipboardManager clipboardManager = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
clipboardManager.addPrimaryClipChangedListener(new ClipboardManager.OnPrimaryClipChangedListener() {
    @Override
    public void onPrimaryClipChanged() {
        ClipData data = clipboardManager.getPrimaryClip();
        long clipDataTimestamp = data.getDescription().getTimestamp();
        // 拿这个时间戳和上一条剪贴板数据获取到的时间戳做比较,如果相同则表示是同一条数据,不处理即可。
    }
});
相关推荐
稻草人不怕疼38 分钟前
Android 15 全屏模式适配:A15TopView 自定义组件分享
android
静默的小猫40 分钟前
LiveDataBus消息事件总线之二-(不含反射和hook)
android
~央千澈~2 小时前
05百融云策略引擎项目交付-laravel实战完整交付定义常量分文件配置-独立建立lib类处理-成功导出pdf-优雅草卓伊凡
android·laravel·软件开发·金融策略
_一条咸鱼_2 小时前
Android Runtime冷启动与热启动差异源码级分析(99)
android·面试·android jetpack
用户2018792831672 小时前
Java序列化之幽灵船“Serial号”与永生契约
android·java
用户2018792831672 小时前
“对象永生”的奇幻故事
android·java
枷锁—sha3 小时前
【BUUCTF系列】[HCTF 2018]WarmUp1
android·网络·web安全·网络安全
梦想改变生活4 小时前
《Flutter篇第二章》MasonryGridView瀑布流列表
android·flutter
杨航 AI4 小时前
PHP 5.5 Action Management with Parameters (English Version)
android·开发语言·php
柿蒂6 小时前
一次Android下载优化,CDN消耗占比从50+%到1%
android·android jetpack