0

MainActivity の開始時に開始される Service を実装しています。このサービスは、ネットワーク接続を確認して維持します。

アクティビティが利用できない場合でもサービスを実行し続けたいので、サービスをアクティビティにバインドしていません。サービスは、接続先のサーバーからメッセージを受信します。

サービスがメッセージを受信したときに次のことを行うための最適なロジックを選択するのに苦労しています。

MainActivity が現在開いていて、ユーザーの前にあるかどうかを確認します

アクティビティでいくつかのメソッドを呼び出して UI とやり取りする場合

アクティビティの更新がない場合、通知は次のとおりです。

私の質問は;

サービスの UI でアクティビティが実行されているかどうかを正しく確認するにはどうすればよいですか? サービスをバインドできることはわかっていますが、アクティビティが閉じている場合はバインドを解除したくありません。それは問題になるでしょうか?

サービスからアクティビティにメッセージを送信する必要があります。上記のシナリオを考えると、これを行うための最良の方法は何でしょうか?

4

2 に答える 2

2

別の方法で行います。

  • Service が Activityとは別のプロセスで実行されない場合、Service は subcalssedApplicationオブジェクトを介して、同期された (マルチスレッド セーフな) メッセージのリストを提供でき、Activity はそれを検索できます。ただし、これは、ポーリングが他の特定のイベントで発生する場合にのみ最適です。

  • メッセージをアクティビティに「プッシュ」したい場合は、アクティビティが実行されたことを確認した時点でサービスに登録する必要があります。その逆ではありません。このシナリオでは、Activity は、Service が Thread-safe な方法で Activity に新しいメッセージを通知できるインターフェイスを実装する必要があります。

もちろん、簡単にアクティビティを開く通知を投稿することもできますが、私が理解しているように、よりスムーズな統合を提供したいと考えています。

于 2013-04-11T12:08:18.033 に答える
0

新しい更新が利用可能になったときに、サービスがステータスバー通知を送信できるようにすることが考えられます。
クリックすると開くように通知を実装しますMainActivity

次に、ユーザーが通知をクリックすると、MainActivityが既に実行されている場合は前面に表示され、そうでない場合は開始されます。
したがって、これにより、MainActivityが現在ユーザーの前で開いているかどうかを確認する必要が基本的になくなります (これは悪い習慣だと思います)。

于 2013-04-11T12:07:31.280 に答える