4

SimpleCursorAdapterクラスが非推奨になり、新しいLoader APIを利用する必要があることに気付いたので、これを利用しようとしましたが、そうしようとすると、CursorLoaderはContentProviderでのみ機能することがわかりました。

今私の質問は、私は本当にコンテンツプロバイダーが必要ですか?公式ガイドでさえ次のように述べています。

データを他のアプリケーションと共有する予定がない場合は、独自のプロバイダーを開発する必要はありません。ただし、独自のアプリケーションでカスタム検索候補を提供するには、独自のプロバイダーが必要です。また、アプリケーションから他のアプリケーションに複雑なデータやファイルをコピーして貼り付ける場合は、独自のプロバイダーが必要です。

そして、私はこれについて何も必要ないと思います+したがって、それは不必要な複雑さを生み出します。だから..どうすればいいですか、自分のCursorLoaderをハックして、このようなデータベース(ContentProviderなしのCursorLoaderの使用法)でのみ機能するようにします。正直なところ、これは本当に好きではありません。

ありがとう!

4

2 に答える 2

4

代わりに、を記述してLoader(またはCommonsWare'sを使用して)直接SQLiteCursorLoaderクエリを実行できます。アプリがローカルデータへの単純なアクセスのみを必要とする場合(そのデータを異なるプロセス/アプリケーションと共有するのでSQLiteDatabaseはなく)、実際には必要ないという点で、ドキュメントは正しいです。ContentProvider

とはいえ、にContentProviderはいくつかの利点があります。たとえば、をSyncAdapter使用してまたは検索インターフェイスを実装するために1つ必要SearchManagerです。私はこれらを自分のアプリケーションに取り入れようとしているので、ContentProvider常にsを実装していることに気づきます。またContentResolver、変更が行われたときに、基になるデータソースにグローバル通知を提供する簡単な手段を提供します。たとえば、はにCursorLoaderを登録ContentObserverし、指定されたを呼び出すと、に通知を受信します。代わりにから直接データをロードする場合、これを設定するにはもう少し作業が必要になります。CursorCursorContentResolver#notifyChange(Uri uri, ContentObserver observer)UriSQLiteDatabase

于 2012-08-15T14:12:10.287 に答える
1

どちらのオプションも、他のオプションと同じくらい優れています。それは好みの問題です。

個人的には、他のアプリと何も共有しないアプリにコンテンツ プロバイダーを使用するのは煩わしく面倒だと思いますが、インタビューで聞いた有効なアドバイスがあります (それはそれらの大手の開発者からのものでした)。 Pocket や Flipboard などのスタートアップ タイプのアプリ) は次のように述べています。推奨される方法を使用して、サポートを受け、バグを修正し、より簡単に拡張できます。

于 2012-08-15T14:05:26.290 に答える