Помогите Диме помочь помогать помочь помогать

Газель Королев

18.08.2016


Порождение новых потоков в реализации Content Provider является жизнеспособным асинхронным решением, только если сторонам, вызывающим провайдер, безразличен результат этих вызовов. Такое возможно при вызове методов insert (), deleted или updated, но не для метода query (), когда основной целью вызова- является как раз извлечение набора данных. Если необходимо вернуть данные, фоновый поток должен установить блокировку в провайдере, пока результат не будет готов. Следовательно, такой газель королев не является асинхронным и не будет освобождать поток, использующий провайдер.


Чаще всего данные, хранящиеся в ContentProvider, обрабатываются прямо в UI-потоке, например считываемые данные отображаются в визуальных компонентах, а запись данных инициируется нажатиями кнопок. Но поскольку из U 1-потока не должен осуществляться прямой доступ к провайдерам, здесь требуются асинхронные механизмы. Обработка непременно должна производиться в фоновом потоке, а ее результаты - передаваться обратно в U 1-поток. Это наиболее часто встречающийся прием, и его можно реализовать с помощью любого универсального механизма параллельного выполнения из числа ранее рассматривавшихся в данной книге, в сочетании с механизмом передачи сообщений между потоками. Тем не менее платформа предлагает два механизма, специализированных именно для провайдеров: AsyncQueryHandler и CursorLoader.