0

Android developer guide状態:内部的に使用されるデータベースに対してContentProviderを実装するオーバーヘッドを避けることはできますか?

あなたは、あなたが他のアプリケーションとデータを共有 する予定がない場合は、独自のプロバイダを開発する必要はありません。

だから、私はSQLiteのDBアプリで完全にローカルに使用している場合、その後のContentProviderは(回避定型的なコードの書き込みの多くを持つ)必要ではないことを理解されているが、私はいただきました!「アンドロイド」を取得didntはこのDBをバックグラウンドで照会する方法は?

ローダーは非同期にデータをロードすることが容易になります:(の少ないオーバーヘッドとして可能な限りの車輪を再発明して)

このタスクはdocsにsatetedようLoadersは、のためにあるかであると思われるかもしれませんあるアクティビティまたは フラグメント。

が、このタスクを実行することができるLoaderのないサブクラスではありません、最も近いサブクラス - CursorLoaderContentResolverに連結できるdesginedされます。だから、私は何かを逃している?それを行うLoaderのサードパーティの実装はありますか、それとも別のアプローチがありますか?

ありがとうございます!

答えて

2

この「DB」をバックグラウンドで照会する方法は?

何でもしてください。 AsyncTaskを使用します。プレーンThreadを使用してください。 IntentServiceを使用します。あなたの好みのORMが非同期オプションを持っているか、RxJava/RxAndroidなどにフックするかどうかを確認してください。

IOWでは、単一の「Android」の方法はありません。

それは、このタスクは、ドキュメントにsatetedようローダーは、のためにあるかであると思われるかもしれません:

LoaderあなたがUI層はかなりのデータベースで作業したい場合にのみ関係します直接。あなただけActivityFragmentLoaderを使用することができます。

私は何かが足りないのですか?

あなたはおそらく、インスピレーションの源としてCursorLoaderにソースコードを使用して、直接のSQLiteで動作AsyncTaskLoaderの独自のサブクラスを作成することが歓迎されています。

が、私は一度、1を持っていたことありませんローダのサードパーティの実装があります。しかし、I discontinued it

+0

だからあなたは何をあなたは、バックグラウンドでデータベースを照会する必要がある場合、今使用していて、そのタスクのローダサブクラスイマイチ右の結論になってきて以来、活動のライフサイクルと同期に対処するための手間をたくないですか? –

+0

@OfekRon:それはアプリによって大きく異なります。あなたは、単にフル 'Loader'契約を尊重しない、独自の' DatabaseLoader'を作成したい場合にも、個々のプロジェクトのために、あなたはそうするために歓迎されています。私は完全契約を尊重することができず、図書館のユーザーを誤解させたくないため、図書館を中止しました。しかし、ローダーのほかに、スレッドや保持されているフラグメント、スレッド、 'onRetainNonConfigurationInstance()'やPOJOデータベースマネージャーなどを使用することができます。実際には、アプリケーションの性質、UIの全体的なアーキテクチャーなどに依存します。 – CommonsWare

1

Loaderは、ContentProvider、ネットワーク、または数多くの数値を処理する必要があるかどうかにかかわらず、あらゆる種類のデータを非同期にロードするために使用できるアクティビティライフサイクルにフックインするメカニズムです。

CursorLoaderが実際に継承するAsyncTaskLoaderと呼ばれるローダーがベースにあります。これは、ローダーの基本レベル機能を提供するために使用できます。ロードする必要がある データモデルを実装してから、AsyncTaskLoader#loadInBackground()メソッドを実装するだけです。この場合、データベースにクエリを実行し、選択した形式で結果を返します。たぶんこの場合、Cursorを返すことは望ましくありませんが、たとえばカーソルの行を表すPojoを作成したいとします。

クイック実装では、ContentResolverではなく、CursorLoader's source codeをデータベースからクエリできます。

0

のContentProviderの必要はありません。あなたが他のプロセス(アプリケーション)ではない

  • 共有データをすれば、

  • ビルドのAppウィジェット。

  • アンドロイドクイック検索ボックスを使用して独自の検索候補を統合します。

...自動UIアップデートでデータを同期してクエリする必要はありません。

実際には、AsyncTaskLoader(アクティビティのライフサイクルを考慮したAsyncTask)での読み取り/書き込みDB操作のラップを試みることができます。また、ビューを更新するために独自のオブザーバを実装する必要があります(data bindingを使用するもう1つのオプション)。

関連する問題