Разница между cursor.setNotificationUri() и getContentResolver(). NotifyChange(uri,null)

Я новичок в Android может кто-нибудь сказать мне, в чем разница между cursor.setNotificationUri() а также getContentResolver().notifyChange(uri,null) при реализации контент-провайдера.

Я видел это cursor.setNotificationUri() используется в query() метод и при обновлении или вставке getContentResolver().notifyChange() используется.

Я мало что понимаю getContentResolver().notifyChange() уведомляет решатель, что некоторые данные были изменены, но что делает cursor.setNotificationUri() делать там?

1 ответ

Решение

Они используются симбиотически. Если вы реализуете ContentProviderпо сути, когда кто-то запрашивает вашего провайдера, вы производите Cursor и позвонить setNotificationUri() на это с некоторым рациональным Uri (такой как Uri используется, чтобы сделать запрос). Позже, если данные обслуживаются вашим ContentProvider изменения, например, после вставки / обновления / удаления, вы звоните getContentResolver().notifyChange(uri, null) так что любой, кто в настоящее время имеет Cursor (потому что они запрашивали ранее) получает уведомление, что данные изменились, и они должны повторно запросить. Если они используют CursorLoaderповторный запрос происходит автоматически.

Другие вопросы по тегам