为什么我几次从ContentObserver收到onChange?

时间:2019-06-05 12:07:07

标签: android android-calendar contentobserver

我在这里读过很多关于这个问题的问题,但是他们都没有为我正确解释。

我需要收听日历以进行更新,一旦更改,我将仅获取事件。事件的获取正常进行。 问题是我多次收到onChange()而不是1(无论如何我都希望如此)。首先,我认为我不是要取消订阅,而是这样做。

我的观察者:

private ContentObserver mContentObserver = new ContentObserver(null) {
    @Override
    public void onChange(boolean selfChange) {
        Logger.d(TAG, "onCalendarUpdateReceived");

    }
};

我称之为订阅:

public void subscribeFromCalendarUpdates() {
    ContentResolver contentResolver = mApplicationContext.getContentResolver();
    contentResolver.registerContentObserver(buildTodayEventsUri(), false, mContentObserver);
}

我使用此URI查询今天的会议:

private Uri buildTodayEventsUri() {
    Logger.d(TAG, "buildTodayEventsUri");

    calculateTodayTimeLimits();

    Uri.Builder eventsUriBuilder = CalendarContract.Instances.CONTENT_URI.buildUpon();
    ContentUris.appendId(eventsUriBuilder, Long.valueOf(mStartDayTime));
    ContentUris.appendId(eventsUriBuilder, Long.valueOf(mEndDayTime));

    return eventsUriBuilder.build();
}

这是我退订的方式:

public void unsubscribeFromCalendarUpdates() {
    Logger.d(TAG, "unsubscribeFromCalendarUpdates");

    if (mContentObserver != null) {
        ContentResolver contentResolver = mApplicationContext.getContentResolver();
        contentResolver.unregisterContentObserver(mContentObserver);
    }
}

由于日志,订阅和退订是对称的。

有人可以向我解释为什么会发生稀疏现象,我该如何解决呢?

0 个答案:

没有答案