2016-04-27 3 views

ответ

1

Что я хотел бы знать, так это почему это не входит в класс ContentResolver?

Вы не могли бы иметь getContentResolver() как метод экземпляра на ContentResolver, как вы завершаете в круговых ситуациях (как бы вы получите ContentResolver, на которой называют getContentResolver()).

Они могли бы реализовать метод static с именем getContentResolver(Context) по адресу ContentResolver. Они решили не делать этого. Спросить «почему?» о решении о внедрении, сделанном десятилетием назад людьми, которые не следуют за Stack Overflow, непрактично.

Почему getContentResolver() нуждается в контексте?

Под одеялом, многое из того, что делает ContentResolver включает IPC к процессу с ContentProvider. Это, в свою очередь, требует Context, для таких вещей, как привязка. Context также используется для получения PackageManager.

+0

А я понимаю первую часть, поэтому ContenResolver требует контекста, потому что системе Android необходимо сообщить провайдеру контента знать, какой экземпляр вызывается, чтобы поставщик контента мог предоставить соответствующий объект контента для распознавателя контента. Правильно ? –

+0

@Codester: Более или менее. Опять же, код с ContentResolver и код с ContentProvider часто бывают в двух отдельных приложениях, или в приложении, и в некоторых базовых бит ОС. Вся эта межпроцессная коммуникация (IPC) реализуется с помощью технологии, известной как Binder. И по какой-то причине работа с Binder привязана к «Контексту». Эта часть, которую я не могу легко объяснить, поскольку она становится глубже в Android, чем я обычно блуждаю. – CommonsWare