Notifying about change inside a ContentProvider: is it thread safe in Loaders perspective?

I have a ContentProvider backed up by SQLiteDatabase and it has a rather common implementation, ie:

class MyContentProvider extends ContentProvider {
    public void update(...) {
        // write stuff to DB
        //...
        // done writing stuff

        getContentResolver().notifyChange(uri,null);
    }
}

Я также использую CursorLoader to perform query and display its results in adapter/listview.

No thread synchronization is done in my ContentProvider.

It is not very clear for me what happens in the following case:

  1. I start some custom non-ui thread and call update() to change some values in DB inside this thread.
  2. это update() причины notifyChange(...) быть названным
  3. мой CursorLoader забирает это изменение и обновляет адаптер, который обновляет ListView

Является ли приведенный выше сценарий нормальным с точки зрения безопасности потоков? Я имею в виду, смотрите, значения записываются с использованием одного потока (не-пользовательского интерфейса), затем тот же поток уведомляет об изменениях и, наконец, изменения принимаются CursorLoader который я подозреваю, использует какой-то другой фоновый поток для загрузки своих данных.

Нужно ли выполнять ручную синхронизацию потоков или это просто сработает? (Android может уже быть умным обо всем этом)

0 ответов

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