Поведение уведомлений ContentObserver - PullRequest
0 голосов
/ 23 января 2020

Потратив долгое время, пытаясь обернуть голову вокруг двух SO ответов ( здесь и здесь ), я думаю, что ContentObserver s работает между этими 4 типами объекты - CursorLoader с, Cursor с, ContentResolver с и ContentProvider с:


  1. CursorLoader пробеги ContentResolver#query()
  2. ContentResolver запускает ContentProvider#query()
  3. ContentProvider запускает Cursor#setNotificationUri(), передает его context.contentResolver, а также Uri параметр запроса
  4. Cursor регистрирует свои собственные ContentObserver 1
  5. Cursor запускает #registerContentObserver() на полученном ContentResolver, передавая полученное Uri и собственное ContentObserver 1
  6. ContentProvider возвращает Cursor в CursorLoader, через ContentResolver
  7. CursorLoader запускает #registerContentObserver() в полученном Cursor, передавая его собственное ContentObserver 2

  1. ContentResolver пробеги ContentProvider#insert()
  2. ContentProvider получает context.contentResolver
  3. ContentProvider пробеги ContentResolver#notifyChange(), прохождение если параметр Uri вставки с null ContentObserver
  4. ContentResolver использует ContentObserver 1 для уведомления Cursor об изменении
  5. Cursor устанавливает свои mContentChanged свойство true
  6. Cursor использует ContentObserver 2 для уведомления CursorLoader об изменении
  7. CursorLoader автоматически повторный запрос

Правильно ли это понимание?

Кроме того, весь ли setNotificationUri и notifyChange симбиоз только , так что CursorLoader знает, когда изменение произошло? То есть, если бы я не использовал CursorLoader и вместо этого просто использовал context.contentResolver в качестве клиента для запроса ContentProvider и получил Cursor, было бы хорошо не использовать эти два метода уведомления?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...