アンドロイドに不慣れな開発者として、私はおそらくバインドされたサービスを誤解したと思います。
サーバーへのアクセスをまとめるサービスを作成しました。このサービスの一部として、サービスはマルチキャストアドレスをリッスンして、ローカルネットワーク上のデバイスがいつ表示および非表示になるかを識別します。
ただし、サービスのインスタンスが複数開始されているため、問題が発生しています。これは、アクティビティが閉じられ(戻るボタンを使用)、その後すぐに再開された場合に発生します。その結果、サービスはローカルポートにバインドできないため、マルチキャストをリッスンできなくなります。
アクティビティが停止すると、バインドされたサービスは終了すると思っていましたが、そうではないようです。
バインドされたサービスを誤解しましたか、それとも何か間違ったことをしていますか?
編集
したがって、私の誤解は、デーモン以外の最後のスレッドが閉じられるとすぐにプログラムがクリーンアップされ、アクティビティが終了するとすぐにプログラムがクリーンアップされると想定していたことです。
リスニングスレッドを明示的にキャンセルし、のソケットを閉じることで、これを修正しましたonDestroy()
。