2

私は、REST を多用するアプリケーションに関する Google I/O での Virgil のプレゼンテーションを見てきました。

Google I/O 2010 - Android REST クライアント アプリケーション

メモ帳のチュートリアルでは UI レイヤーから直接データベース呼び出しを行いますが、Virgil はサービスでデータベース呼び出しを行うことを提案しています。

現時点では、アクティビティの onCreate メソッドは、拡張された ContentProvider を使用して SQLite データベースにアクセスし、アクティビティの ListView にアタッチする Cursor をクエリします。

このコードをサービスに移動したいと思います。簡単です。私の質問は、カーソルを UI レイヤーに戻す適切な方法は何ですか? 多くの質問が提起されているのを見てきましたが、より適切な方法があることを示唆する人が常にいるようです。その方法は何ですか?

より具体的には、これまでのところ、Activity はある種のリスナーとして登録する必要があると考えています。サービスで Cursor が取得されると、それにアクセスするために UI レイヤーに通知が設定されます。アクティビティがそれをつかむことができるように、サービスはそれをどこに押し込みますか?

また、私が考えているアーキテクチャは、アクティビティによって呼び出される拡張サービスを持つことです。このサービス内では、拡張された ContentProvider を使用してデータベース トランザクションが行われ、リッスンしているすべてのアクティビティに通知され、Web サービスにヒットするスレッドが起動されます。したがって、1 つの拡張サービス、1 つの拡張 ContentProvider、およびさまざまな Web サービス用のいくつかの拡張スレッドがあります。これは受け入れられますか?

4

2 に答える 2

1

カーソルを取得するために、Activity 内で managedQuery 呼び出しを使用しているだけです。これはかなり軽い操作であり、UI を保持するとは思いません。

新しいデータを見つけるために Web サービスを呼び出すサービスを作成しました。新しいデータが見つかった場合は、データベースに配置され、sendBroadcast が呼び出されます。私のアクティビティには、ブロードキャストを聞いてカーソルで requery() を呼び出す登録済み BroadcastReceiver があります。

于 2010-09-16T21:26:24.360 に答える
0
于 2013-02-13T09:19:58.937 に答える