首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ContentObserver onChange仍在研究以前的onChange

ContentObserver onChange仍在研究以前的onChange
EN

Stack Overflow用户
提问于 2017-07-07 20:17:51
回答 1查看 491关注 0票数 0

我的应用程序通过远程命令将联系人添加到电话簿。一个命令可以添加的联系人数量没有限制。

应用程序使用服务中的ContentObserver侦听添加的联系人上的更改。onChange()的处理可能需要一段时间,因为应用程序需要找到更新了哪些联系人以及哪些字段受到了影响。

问题是,当接收到一个命令同时添加多个联系人(例如200)时,ContentObserver会接收重叠的onChange()。这是在它还在处理前一个版本时获取onChange()。这种重叠会造成问题。

处理这件事最好的方法是什么?

理想情况下,我想要的是:如果在处理前一个onChange()时发生了一个新的(),那么就放弃对前一个的工作,从新的一个开始。但怎么做呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-07 20:25:07

我也遇到了同样的问题,我解决了这样的问题,例如,如果你有10次联系人更改,第一次联系人更新将得到onChange,但在本机联系人中,这将需要大约1秒的时间,所以我们有足够的延迟更新之前,如果我们得到下一个联系人更新,它将取消上一个计时器,它将启动自己的,所以我们将得到运行方法,只有在所有联系人更新。

代码语言:javascript
复制
    private Timer waitingTimer;

    private Timer waitingSMSTimer;

    private Timer waitingVoiceMailTimer;

    private void sendDelayAction() {

        if (waitingTimer != null) {
            waitingTimer.cancel();

            /**
             * Timer in Java will throw IllegalStateException if you try to schedule task on a Timer
             * which has been cancelled or whose Task execution Thread has been terminated. so we
             * are making null and create timer every time.
             */
            waitingTimer = null;
        }

        waitingTimer = new Timer();

        final TimerTask timerTask = new TimerTask() {

            @Override
            public void run() {
                // Do your action here.
            }
        };

        waitingTimer.schedule(timerTask, 1500);
    }

    /**
     * Content observer for Address book contacts change notification.
     */
    public class AddressBookContentObserver extends ContentObserver {
        public AddressBookContentObserver() {
            super(null);
        }

        @Override
        public void onChange(boolean selfChange) {
            super.onChange(selfChange);
            // We are waiting for some time, Native contact taking some time ot update, before that
            // if we try to fetch the contact, its not returning the newly added contact
            sendDelayAction();
        }

        @Override
        public boolean deliverSelfNotifications() {
            return true;
        }
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44978999

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档