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:
- I start some custom non-ui thread and call
update()
to change some values in DB inside this thread. - это
update()
причиныnotifyChange(...)
быть названным - мой
CursorLoader
забирает это изменение и обновляет адаптер, который обновляетListView
Является ли приведенный выше сценарий нормальным с точки зрения безопасности потоков? Я имею в виду, смотрите, значения записываются с использованием одного потока (не-пользовательского интерфейса), затем тот же поток уведомляет об изменениях и, наконец, изменения принимаются CursorLoader
который я подозреваю, использует какой-то другой фоновый поток для загрузки своих данных.
Нужно ли выполнять ручную синхронизацию потоков или это просто сработает? (Android может уже быть умным обо всем этом)