0

私は最初のAndroidアプリケーションに取り組んでいますが、サインイン後、一定期間後またはユーザーの場所が変更されるたびに、ユーザーの場所をサーバーにpingするサービスを開始するアクティビティがあります。サービスからアクティビティへの通信のために、BroadcastReceiver を使用しています。

場所をサーバーに記録した後のサービスは、アクティビティが受信したメッセージをブロードキャストし、それに応じて UI を更新します。この時点まではすべて問題ありませんが、サービスがまだバックグラウンドで実行されている間にアクティビティをバックグラウンドから削除すると、サービスがサーバー上の場所をログに記録し、メッセージをブロードキャストするたびにクラッシュし、メッセージが表示されますアプリケーションが停止されたことを示す画面に。

Androidブロードキャストシステムは、ブロードキャストを受信するために私のアクティビティが生きていることを期待していると思います。ブロードキャストが見つからない場合、サービスがクラッシュします。

私が望むのは、アクティビティが周囲にある場合はブロードキャストを受信することですが、そうでない場合はブロードキャストを無視する必要があるということです。サービスがクラッシュすることはありません。

onResume() でサービスに登録し、onPause() で登録解除することで、適切な手順に従っています。さらに、サービスをマニフェストではなく動的に登録しています。

4

2 に答える 2

0

私はそこで愚かな間違いをしていました。アクティビティで定義された変数の参照をブロードキャスト サービスに渡していました。アクティビティがまだ生きているときは正常に機能しましたが、アクティビティが強制終了されたときにサービスが null ポインターになり、更新時にサービスがクラッシュしました。

于 2016-04-17T07:45:55.470 に答える
0

時間の無期限の内部には使用しbindService(intent)ないstartservice(intent)でください。したがって、アクティビティを終了してから呼び出すときに、アクティビティがサービスにバインドされるまで機能しますonUnbind()

onDestroy() in アクティビティ コール停止サービス。

受信者がそこに登録されていないことをマニフェストで確認してください。

于 2014-04-29T09:14:49.580 に答える