私は Android 用の SQLite データベース プログラミングを行いましたが、Content-Provider については次のことを除いて何も知りません。
しかしその後、
- 「Content-Provider」と「SQLite Database」の正確な違いは何ですか?
- 次の場合、データを保存するのに最適なのはどれですか?
任意の例または役立ちます!!
私は Android 用の SQLite データベース プログラミングを行いましたが、Content-Provider については次のことを除いて何も知りません。
しかしその後、
任意の例または役立ちます!!
次のように、1つの大きな違いを見つけました。
データベースにデータを保存することは、データを永続化するための 1 つの良い方法ですが、Android で作成されたデータベースは、visible
それらを作成したアプリケーションに対してのみ使用できるという注意点があります。つまり、あるアプリケーションで Android 上に作成された SQLite データベースは、そのアプリケーションでのみ使用でき、他のアプリケーションでは使用できません。
この記事でneed to share data between applications, you need to use the content provider model as recommended in Android.
は、コンテンツ プロバイダーの基本と実装方法について説明します。
このリンクでこの記事を見つけました
本当にうれしい情報提供。
「Content-Provider」と「SQLite Database」の正確な違いは何ですか?
ContentProvider
ファサードです。データベースを他のプロセスに公開するために実装できる API です。データが SQLite データベースに格納されるように実装できますが、そうである必要はありません。
次の場合、データを保存するのに最適なのはどれですか?
それは抽象的に答えることは不可能です。一般的に言えば、何かを使用する必要がない限りContentProvider
、データベースを使用してください。
私は、単純に SQLite メソッドを使用した、何千人ものユーザーが使用する多くの優れたアプリを作成しました。しかし、それは少し前のことで、大量のコードを手動で作成する必要がありましたが、現在は ContentProvider で簡単に処理できます。当時、私はコンテンツ プロバイダーの使用に賛成ではありませんでした。コードが複雑になるだけだったからです。
しかし、ここ数年、Android の進化に伴い、時間を節約し、より多くのことができるようになるので、私は ContentProvider に移行しました。私は今それを広範囲に使用しています。コンテンツ プロバイダー クラスを作成すると、作業がずっと楽になります。ContentProvider を使用すると、以前はすべてを手動で記述しなければならなかったカーソル ローダー、ローダー コールバック、一括挿入を簡単に処理できますが、それでも効率的には機能しませんでした。特にリスト ビューを更新する場合は、notifychange() メソッドが 1 つだけで自動的に更新されるようになりました。つまり、独自のリスナーを入力したり、リスト ビューやアダプターのコンテンツを手動で更新したりする必要がなくなりました。さらに、データベースの開閉について心配する必要も、メモリ リークについて心配する必要もありません。それはすべてコンテンツ プロバイダーによって処理されます。私が時々直面する唯一の問題は、ContentProvider でいくつかの複雑なクエリを実行できないことです。この場合でも、生のクエリを使用して、昔ながらの sqlite との手動の対話を使用できます。
以前に独自の DbAdapter、Helper、および Observer を作成したことがある場合は、すべてを ContentProvider に変換するのに時間を費やすことなく、それらを新しいアプリに安全に引き継ぐことができます。しかし、私の経験に基づいて、ContentProvider に移行することを強くお勧めします。慣れるまで少し時間がかかりますが、慣れてしまえば続けられます。
UPDATE 2017私はRealmに 切り替えました。これは、あらゆるプラットフォームでデータベースを使用するためのはるかに優れた方法です。学習に数時間を費やすことで、アプリ開発のキャリアで数え切れないほどの時間を節約できます。
コンテンツプロバイダーは、アプリケーション間でデータを共有する場合に使用されます。
アプリケーションにデータベースが接続されていて、別のアプリケーションでデータを使用する場合は、データを公開するコンテンツプロバイダーを実装できます。
主な違いは、アプリが別のアプリと情報を共有する必要がある場合は、Content-Providerを使用することです。SQLiteはそれを作成するアプリのストレージデータのみ
高度なコンテンツ管理システムについて考えてみてください。各オブジェクト (ページ、画像、ニュース記事、イベント アイテムなど) には、コンテンツ、アドレス、ユーザー権限、およびシステムのさまざまな部分から操作する方法があります。コンテンツ プロバイダーは、Android に対してそれを行います。アプリケーションに保存したファイルや画像を共有できるようになりました。ビジネスの連絡先、編集可能なメモなどの共有可能なカスタム オブジェクトを作成することもできます。また、他のアプリケーションからオブジェクトを開くときに、そのようなオブジェクトを処理するためのセキュリティと既定のアプリケーションを指定します。
同じ疑問を探しながらこの回答を読んだので、共有することを考えました。それは述べています -
内部で簡単に変更できるように、データをさらに抽象化することをお勧めします。基になるデータベース構造を後で変更することにした場合はどうなるでしょうか。ContentProvider を使用すると、その中にすべての構造上の変更を含めることができますが、使用しない場合と同様に、構造上の変更によって影響を受けるコードのすべての領域を変更する必要があります。さらに、データベースへの低レベルのアクセスでコードを散らかすのではなく、データにアクセスするために同じ標準 API を再利用できるのは素晴らしいことです。
そのため、コンテンツ プロバイダーを使用することをお勧めします。
1つの違いは、コンテンツプロバイダーがコンテンツオブザーバーをプラットフォームでサポートしていることです。SQLiteデータベース用に独自のObservableパターンを実装する必要があります。