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