Почему я получаю onChange от ContentObserver несколько раз? - PullRequest
0 голосов
/ 05 июня 2019

Я читал здесь много квестов об этой проблеме, но ни один из них не объясняет мне это правильно.

Мне нужно прослушать календарь на предмет обновлений, как только что-то изменилось, я просто получу события. Выборка событий работает правильно. Проблема в том, что я получаю 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);
    }
}

Из-за логов подписка и отмена подписки симметричны.

Может кто-нибудь объяснить мне, почему это происходит, и как я могу это решить?

...