タイトルは私の質問を要約していますが、基本的に私が理解したいことを詳しく説明すると、Androidデザイナーは、SQLiteにアクセスするだけでなく、共有データを使用してコンテンツプロバイダーを使用する必要があるアプリを求めます直接データベース?
私が考えることができる唯一の理由は、特定のファイルは特定のプロセスにしかアクセスできないため、コンテンツプロバイダーがデータベースファイルへの読み取りおよび/または書き込みアクセスを許可する前に各アプリに適切な権限を与えることを保証するゲートキーパーであるため、セキュリティです。それがContentProviderが作成された主な理由ですか?
それは何よりも、データ利用者とデータ提供者を隔離する方法です。独自のコンテンツプロバイダーを開発するか、既存のプロバイダーを拡張して、一部のデータを公開するか、少なくとも他のアプリケーションで利用できるようにします。
確かに、これはセキュリティの観点からアクセスを制御するサーバーですが、必要なときにいつでもデータの物理的な実装をやり直すこともできます。その場合は、コンテンツプロバイダーのバックエンドを調整するだけです。データコンシューマアプリケーションを書き直す必要はありません。彼らは、実際の基本的な実装の変更を認識せずに、コンテンツリゾルバーを通じてデータへのアクセスを続行します。
また、Androidは、データが複数のクライアントによってアクセスされる場合でも、コンテンツプロバイダーの1つのインスタンスのみをインスタンス化するため、ユーザーが気にすることなく、同時アクセスを処理します。
最後に、これはクリーンな起動とシャットダウンの面倒な作業にも対応できると思います。
ContentProvider
は、他のサードパーティアプリケーションと通信するために必要なすべてのプロセス間通信も抽象化します。このコードを自分で書かなければならないのは巨大苦痛でしょう。
ContentProviderは、データの格納/生成方法の詳細を隠す抽象化でもあります。たとえば、私のアプリの1つに、PNG画像を返すコンテンツプロバイダーがあります。これらの画像はどこにも保存されず、オンデマンドで生成されます。