каковы преимущества использования ContentProvider по сравнению с обычным хранилищем SQLIte?


Я хочу обмениваться данными между несколькими приложениями, вместо того, чтобы иметь contentresolver->ContentProvider механизм, я могу просто определить клиентскую библиотеку, которая разговаривает с процессом, который делает операции базы данных SQLite правильно?

Что приносит сюда ContentProvider, чего мы не можем достичь, если процесс предоставляет данные?

2 4

2 ответа:

Вы можете найти ответ точное различие между "контент-провайдером" и "базой данных SQLite".

Но мне нравится объяснять это..
What does the ContentProvider brings in here which we cannot achieve by have a Process expose the data?

Есть одно конкретное ограничение SQLite, о котором вы должны знать, и это то, что SQLite является только однопользовательским. На самом деле это означает, что вам нужно будет защитить свою базу данных от одновременного доступа из нескольких потоков. Это, как правило, не проблема в контент-провайдере, так как они почти всегда имеют однопоточная реализация.

Также рекомендуется обеспечить дополнительный уровень абстракции над вашими данными, чтобы облегчить внутренние изменения. Что делать, если вы решите изменить базовую структуру базы данных в более позднее время? Если вы используете ContentProvider , Вы можете содержать все структурные изменения в нем, где, как если бы вы не использовали его, вы вынуждены изменить все области кода, на которые влияют структурные изменения. Кроме того, приятно иметь возможность повторно использовать тот же стандарт API для доступа к данным вместо засорения кода низкоуровневым доступом к базе данных.