私はService
からActivity
を開始してWebページの変更を探しています。これはプライベートアプリなので、バッテリーの寿命を気にしません...
しかし、Service
からActivity
にデータを渡したい... Activity
からService
を呼び出す方法が見つからないようです。どうすればこれを達成できますか?
Alexが示したように、サービスにバインドし、イベントで使用するために、何らかのリスナーまたはコールバックをサービスに渡すことができます。
または、ブロードキャストIntent
を使用して、おそらくIntent
でsetPackage()
などのメソッドを使用して、ブロードキャストのスコープを制限できます。
または、createPendingResult()
を使用してPendingIntent
を作成し、Intent
extraとしてサービスに渡すことができます。サービスはそのPendingIntent
を使用できますアクティビティでonActivityResult()
をトリガーします。
または、ResultReceiver
を使用できます。
または、Messenger
を使用できます。
(確かに、私は後者の2つのアプローチを試したことはありませんが、ここでうまくいくと思います)
もう1つの選択肢:サービスがコンテンツプロバイダーを更新する場合、アクティビティは ContentObserver で通知できます。サービスがサーバーからデータをダウンロードし、アクティビティの新しいコンテンツを表示するだけの場合、これで十分です。
いくつかのい方法:
1.)アクティビティがまだ開始されていない場合は、intent
とstartActivity
を使用しますが、intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
を覚えておいてください
2.)または、アクティビティが既に開始されている場合は、アクティビティに独自のコールバックメソッドを記述し、サービスにメソッドを登録してから、サービスでメソッドを直接呼び出すことができます。
賢い方法を見つけたい。
ブロードキャストもうまく機能すると思います。ブロードキャストを受信してアクティビティを開始する静的な内部クラスを作成できます。しかし、それはまた私の意見ではいです。
ResultReceiverメカニズムは別の投稿で説明されています:- Restful APIサービス ただし、すべての場合に機能するわけではありません。その投稿に対する私のコメントを参照してください。限定された範囲のブロードキャストまたはPendingIntentメカニズムがより適しているようです。