私は最初のAndroidアプリケーションに取り組んでいますが、サインイン後、一定期間後またはユーザーの場所が変更されるたびに、ユーザーの場所をサーバーにpingするサービスを開始するアクティビティがあります。サービスからアクティビティへの通信のために、BroadcastReceiver を使用しています。
場所をサーバーに記録した後のサービスは、アクティビティが受信したメッセージをブロードキャストし、それに応じて UI を更新します。この時点まではすべて問題ありませんが、サービスがまだバックグラウンドで実行されている間にアクティビティをバックグラウンドから削除すると、サービスがサーバー上の場所をログに記録し、メッセージをブロードキャストするたびにクラッシュし、メッセージが表示されますアプリケーションが停止されたことを示す画面に。
Androidブロードキャストシステムは、ブロードキャストを受信するために私のアクティビティが生きていることを期待していると思います。ブロードキャストが見つからない場合、サービスがクラッシュします。
私が望むのは、アクティビティが周囲にある場合はブロードキャストを受信することですが、そうでない場合はブロードキャストを無視する必要があるということです。サービスがクラッシュすることはありません。
onResume() でサービスに登録し、onPause() で登録解除することで、適切な手順に従っています。さらに、サービスをマニフェストではなく動的に登録しています。