5

私は Android で少し遊んでいて、アクティビティとサービスを備えた小さなアプリを書いています。アクティビティは、ボタンのクリックでサービスを開始し、URI からいくつかのデータをフェッチして、結果として返す必要があります。場合によっては、データが利用できないか、基準を満たしていないため、アクティビティがバックグラウンドであっても、サービスは X 分ごとに再試行する必要があります。

Intentand ResultReceiver(バンドルで渡される)を介して、アクティビティとサービスの間の通信を実装しました。サービスを実装するときに、新しいコンポーネントを使用したかったのですが、オブジェクト ( )を追加できず、基本型JobSchedulerしか受け入れられないことがわかりました。PersistableBundleParcelableResultReceiver

ネットワークが利用可能になったときに実行され、X 分ごとにデータをチェックするジョブをスケジュールするサービスが必要です。取得したら、データをサービスに返して、それが受け入れられるか、再試行する必要があるかを判断できるようにします。サービスがデータを受け入れると、 を介してアクティビティにデータが返されResultsReceiverます。

ResultsReceiverと一緒に使用することはできません。また、インスタンスJobServiceを作成しないため( によって行われる)、コールバック オブジェクトへの参照を渡すこともできません。JobServiceJobInfo.Builder

スケジュールされたジョブとそれを呼び出したサービスとの間で通信するにはどうすればよいですか?

Androidに詳しくないので、些細なことでしたら申し訳ありません..

ありがとう!

4

1 に答える 1

6

スケジュールされたジョブとそれを呼び出したサービスとの間で通信するにはどうすればよいですか?

一般的に、あなたはしません。あなたのサービスも活動も存在しない可能性があります。背後にJobSchedulerあるポイントは、アプリが実行されなくなったときにジョブを実行することです。他の方法で使用している場合は、適切ではない可能性があります。

LocalBroadcastManagerそうは言っても、ジョブが完了したことを示すためにプロセス内でイベントを発生させるために、イベント バス (greenrobot の EventBus が私の選択ですが、ここでも機能します) を使用することは大歓迎です。サービス (ま​​たはアクティビティ) は、バス上のイベントに登録し、それらのイベントが発生したときに反応することができます。しかし同時に、イベント バスは、登録されたハンドラーが存在しない場合にイベントを "床に落とす" ことに完全に満足しているため、JobService必要に応じて "ファイア アンド フォーゲット" モードでイベントを発生させることができます。

于 2016-05-20T14:45:47.230 に答える