私は最初の Android アプリケーションを作成しており、サービスとアクティビティ間の通信について理解しようとしています。バックグラウンドで実行され、GPS と時間ベースのログ記録を行うサービスがあります。サービスの開始と停止に使用されるアクティビティがあります。
そのため、最初に、アクティビティの開始時にサービスが実行されているかどうかを確認できる必要があります。それについては他にもいくつか質問があるので、それを理解できると思います(ただし、お気軽にアドバイスを提供してください)。
私の本当の問題: アクティビティが実行中で、サービスが開始されている場合、サービスがアクティビティにメッセージを送信する方法が必要です。この時点での単純な文字列と整数 - ほとんどのステータス メッセージ。メッセージは定期的に発生するわけではないため、別の方法がある場合、サービスをポーリングすることは良い方法ではないと思います。アクティビティがユーザーによって開始されたときにのみ、この通信が必要です。サービスからアクティビティを開始したくありません。つまり、アクティビティを開始し、サービスが実行されている場合、興味深いことが発生すると、アクティビティ UI にいくつかのステータス メッセージが表示されます。アクティビティを開始しない場合、これらのメッセージは表示されません (あまり興味深いものではありません)。
サービスが実行されているかどうかを判断できるはずです。実行されている場合は、アクティビティをリスナーとして追加します。次に、アクティビティが一時停止または停止したときに、アクティビティをリスナーとして削除します。それは実際に可能ですか?それを行う唯一の方法は、Activity に Parcelable を実装させ、サービスのリモート インターフェースを介して渡すことができるように AIDL ファイルを作成することです。それはやり過ぎのようですが、Activity が writeToParcel() / readFromParcel() を実装する方法がわかりません。
もっと簡単で良い方法はありますか?助けてくれてありがとう。
編集:
後でこれに興味がある人のために、サンプル ディレクトリに AIDL を介してこれを処理するための Google のサンプル コードがあります: /apis/app/RemoteService.java