Какой поток запускает ContentProvider?

Если я позвоню ContentProvider из Activity, в каком потоке работает ContentProvider?

Например, что произойдет, если действие будет прекращено, а в ContentProvider будет выполнен запрос? Скажем, у вас медленный сетевой запрос, например,

19
задан louielouie 19 March 2012 в 06:28
поделиться

1 ответ

Если вы имеете в виду обычный вариант использования ContentResolver для вызова ContentProvider, то вот что происходит согласно лучшим из моих знание:

  1. В этом примере я предполагаю, что ваш ContentProvider живет в одном процессе, а ваша активность в другом процессе.

  2. Если ContentProvider не был создан, то метод onCreate() вызывается с использованием «основного» потока процесса приложения.

  3. Методы query()/insert()/update()/delete() вызываются с помощью BinderThreads, которые сидят в каждом процессе приложения в ожидании входящих команд от других процессов.

Итак, что произойдет, если Activity, вызвавшая запрос()/insert()/и т. д., будет уничтожена в середине вызова одного из этих методов? Я не могу сказать наверняка, но я совершенно уверен, что все, что происходит в ContentProvider, будет продолжаться, потому что процесс ContentProvider должен продолжаться без изменений, но что произойдет после того, как этот метод вернется, я не могу сказать наверняка.

Я не уверен, как медленная сеть вообще может быть вовлечена в это, если ваш контент-провайдер не поддерживается сетью, а не обычной sqlite db?

Пояснение:

Есть две возможности при вызове Функция ContentProvider (запрос/вставка/обновление/удаление/и т.д.):

  1. Ваш ContentProvider находится в том же процессе, что и вызывающий. Если да, то функция ContentProvider выполняется синхронно в том же потоке, что и вызывающая сторона.

  2. Ваш ContentProvider находится в другом процессе, чем вызывающий.Если да, то функция ContentProvider запускается в потоке связывания в процессе ContentProvider.

В обоих случаях вызывающий объект блокируется до тех пор, пока не вернется функция ContentProvider. Как всегда прочитайте полную документацию от Google и/или исходный код AOSP.

http://developer.android.com/reference/android/content/ContentProvider.html http://developer.android.com/guide/topics/providers/content-provider-basics.html http://developer.android.com/guide/components/processes-and-threads.html

21
ответ дан 30 November 2019 в 04:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: