AndroidのContentProviderが作成されたのはなぜですか?


11

タイトルは私の質問を要約していますが、基本的に理解したいのは、AndroidデザイナーがSQLiteデータベースに直接アクセスするのではなく、共有データを操作してコンテンツプロバイダーを使用する必要があるアプリが必要な理由です。

私が考えることができる唯一の理由は、特定のファイルが特定のプロセスにしかアクセスできないため、コンテンツプロバイダーがデータベースファイルへの読み取りおよび/または書き込みアクセスを許可する前に各アプリに適切な権限を与えることを保証するゲートキーパーであるため、セキュリティです。それがContentProviderが作成された主な理由ですか?

回答:


6

それは何よりも、データ利用者とデータ提供者を隔離する方法です。独自のコンテンツプロバイダーを開発するか、既存のプロバイダーを拡張して、一部のデータを公開するか、少なくとも他のアプリケーションで利用できるようにします。

確かに、これはセキュリティの観点からアクセスを制御するサーバーですが、必要なときにいつでもデータの物理的な実装をやり直すこともできます。その場合は、コンテンツプロバイダーのバックエンドを適応させるだけです。データコンシューマアプリケーションを書き直す必要はありません。彼らは、実際の基盤となる実装の変更を認識せずに、コンテンツリゾルバーを通じてデータへのアクセスを続行します。

また、Androidは、データが複数のクライアントからアクセスされている場合でも、コンテンツプロバイダーのインスタンスを1つだけインスタンス化するため、ユーザーが気にすることなく、同時アクセスを処理できます。

最後に、これはクリーンな起動とシャットダウンの面倒な作業にも対応できると思います。


1
おそらく断熱が最良の答えだと思います。同時アクセスについてのあなたの意見に同意しません。SQLiteとAndroid Javaインターフェイスが同時実行を処理します。ContentProvider自体が複数の同時スレッドによるクエリ/挿入/更新を許可するため、実際には何もしません。
satur9nine

3

ContentProviderまた、他のサードパーティのアプリケーションと通信するために必要とされるプロセス間通信のすべてを抽象化します。このコードを自分で書かなければならないのは大変な苦痛です。


サードパーティは常にデータベースファイルに直接アクセスするだけでよく、プロセス間通信は必要ありません。
satur9nine 2012年

どういう意味かわかりません...アプリが「サードパーティ」の場合、定義上、異なるプロセスに存在する必要があります(すべてのAndroidアプリには独自のメインプロセスがあるため)。また、Android OSで他のアプリケーションの生データストアに直接アクセスできる場合は、かなり大きなセキュリティ問題が発生します。
Alex Lockwood 2012年

1

ContentProviderは、データの格納/生成方法の詳細を隠す抽象化でもあります。たとえば、私のアプリの1つに、PNG画像を返すコンテンツプロバイダーがあります。これらの画像はどこにも保存されず、オンデマンドで生成されます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.