1

アクティビティがインテントを作成し、それを IntentService に送信できることを知っています。

リクエストを実行した IntentService は、呼び出し元のアクティビティにメッセージを送り返すことができることを知っています。

IntentService から呼び出し元のアクティビティに送信されるメッセージには、バンドル [setData(Bundle b);] を含めることができることを知っています。

質問: IntentService から呼び出し元のアクティビティに送信されるメッセージに、任意のサイズ (169 レコードとしましょう) のバンドル/カーソルを含めることはできますか?

4

2 に答える 2

0

Cursor は Parcelable ではありません... したがって、おそらく Bundle の一部として渡すことはできません。

通常、パターンは、IntentService が共有モデル (おそらくデータベースまたは完全なコンテンツ プロバイダー) 内のレコードを変更し、そのモデル内の関心のある Uris に設定されたローダーを介してアクティビティを観察します。

いいえ、Cursor で Loaders を使用するからといって、必ずしもコンテンツ プロバイダーを作成する必要があるわけではありませんが、作成すると役に立ちます。

于 2013-04-30T04:28:08.033 に答える
-1

この記事を使用して、別のスレッドから ListView にデータを取得する方法を見つけることができました。

これで、SQLite データベースのクエリからビューをロードし、アクティビティ ビューからユーザー入力を取得し、同じ IntentService (SQLite データベースのテーブルごとに 1 つの IntentService、カスタム トリガー クラスをカウントしない [すべてのアクティビティ]同じテーブルに関連付けられている場合は、同じ IntentService を使用します])!

IntentService が Message クラスを使用して呼び出し元のアクティビティに応答するとき、SQLite db クエリから返されたシリアライズ可能な 2 次元配列 [Bundle.putSerializable("Label", 2DArray )] を含むバンドルを Message に詰め込みます。

アクティビティでは、その配列は 2 つのフィールドを持つカスタム クラスを含む配列に変換され、カスタム ArrayAdapter にバインドされます。

Activity.onResume() が呼び出されるたびにビューが最新のデータで再ロードされるため、通知機能は必要ありません。

于 2013-05-01T15:09:22.923 に答える