Ответ 1
Если вы имеете в виду обычный вариант использования ContentResolver для вызова ContentProvider, то вот что происходит, насколько мне известно:
-
Я предполагаю в этом примере, что ваш ContentProvider живет в одном процессе и вашей деятельности в другом процессе.
-
Если ContentProvider не был создан, метод onCreate() вызывается с использованием "основного" потока процесса приложения.
-
Методы query()/insert()/update()/delete() вызываются с помощью BinderThreads, которые сидят в каждом процессе приложения, ожидая входящих команд из других процессов.
Итак, что произойдет, если действие, вызвавшее запрос()/insert()/etc, будет убито в середине одного из этих вызовов метода? Я не могу сказать наверняка, но я уверен, что все, что происходит в ContentProvider, будет продолжаться, потому что процесс ContentProvider должен оставаться незатронутым, но что происходит после того, как этот метод возвращается, я не могу сказать наверняка.
Я не уверен, насколько медленная сеть будет задействована в этом вообще, если ваш контент-провайдер не поддерживается сетью вместо обычного sqlite db?
Разъяснение:
Существует две возможности при вызове функции ContentProvider (запрос/вставка/обновление/удаление/etc):
-
Ваш ContentProvider находится в том же процессе, что и вызывающий. Если это так, функция ContentProvider выполняется синхронно в том же потоке, что и вызывающий.
-
Ваш 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