Чому створено ContentProvider Android?


11

Заголовок підсумовує моє запитання, але в основному, щоб розібратися в тому, що я хочу зрозуміти, це чому дизайнери Android хочуть, щоб додатки, які повинні працювати з спільними даними, щоб використовувати Провайдер контенту, а не просто отримувати прямий доступ до бази даних SQLite?

Єдина причина, про яку я можу подумати, - це безпека, оскільки доступ до певних файлів може бути лише певними процесами, і таким чином Провайдер вмісту є воротарем, який забезпечує кожному додатку належні привілеї, перш ніж дозволяти читати та / або записувати доступ до файлу бази даних. Це головна причина, чому створено ContentProvider?

Відповіді:


6

Це перш за все спосіб ізоляції споживачів даних та постачальників даних. Ви розробляєте власного постачальника контенту або розширюєте існуючого, якщо хочете оприлюднити деякі свої дані або принаймні отримати інші програми.

Правда, це може сервер для контролю доступу з точки зору безпеки, але він також дозволяє вам переробляти фізичну реалізацію даних, коли вам потрібно. Все, що вам потрібно зробити, - це адаптувати задню частину вашого контент-провайдера в цьому випадку. Заявки споживачів даних не доведеться переписувати. Вони надалі отримуватимуть доступ до ваших даних через програму вирішення вмісту, не знаючи про будь-яку зміну фактичної базової реалізації.

Крім того, Android створить лише один екземпляр вашого постачальника вмісту, навіть якщо до них звертаються декілька клієнтів, тож він буде дбати про одночасний доступ, не потребуючи цього.

Нарешті, я вірю, що це також впорається із зусиллям чистого пуску та вимкнення.


1
Я думаю, що ізоляція - це, мабуть, найкраща відповідь. Я не згоден з вашою думкою щодо паралельного доступу, SQLite та інтерфейс Android Java Java обробляють паралельність, сам ContentProvider дозволяє декілька одночасних запитів / запитів / вставок / оновлень, тому це насправді нічого не робить для вас.
Satur9nine

3

ContentProviderТакож абстрагує з усіх зв'язків між процесами , які необхідні для того , щоб спілкуватися з іншими додатками сторонніх розробників . Потрібно написати цей код самостійно, було б величезним болем.


Треті сторони завжди могли безпосередньо отримати доступ до файлу бази даних, там не потрібно взаємозв'язок між процесами.
satur9nine

Я не впевнений, що ви маєте на увазі ... якщо додаток є "стороннім", то за визначенням він повинен існувати в іншому процесі (оскільки кожен додаток для Android має свій основний процес). Крім того, якщо ОС Android дозволила вам мати прямий доступ до сховищ даних інших програм, це призведе до досить великих проблем безпеки.
Алекс Локвуд

1

ContentProvider - це також абстракція, яка приховує деталі того, як дані зберігаються / створюються. Наприклад, в одному з моїх додатків є постачальник вмісту, який повертає зображення PNG. Ці зображення ніде не зберігаються, вони генеруються на вимогу.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.