私はServiceクラスを拡張し、着信メッセージを処理するために別のスレッドを使用するサービスに取り組んでいるので、onCreateメソッドに次のものがあります
thread = new HandlerThread("MYSERVICE-THREAD",
Process.THREAD_PRIORITY_BACKGROUND);
thread.start();
serviceLooper = thread.getLooper();
serviceHandler = new ServiceHandler(mServiceLooper);
このスレッドでは、LocationManagerを作成し、場所の変更をリッスンするように設定します。ただし、スレッドのライフサイクルについては少し心配です。これが理由です:
サービスのonDestroyメソッドでロケーションマネージャーからロケーションリスナーを削除せず、telnet経由でロケーションを強制的に更新しない場合、すべてが正常に機能します。私はこれが奇妙であることに気づき、サービスのonDestroyメソッドでthread.quit()を使用してスレッドを明示的に終了しようとしました。そのため、telnetから位置情報を更新すると、そもそも予想していた警告が表示されます。ハンドラーがデッドスレッドでハンドラーを呼び出していたこと。
ロケーションマネージャからロケーションリスナーを削除すると、明らかにこれが解決されますが、これは、スレッドを明示的に閉じない場合、サービスが破棄された後もスレッドが実行され続けることを示唆しているようです。これは正しいです?developer.android.comの例では、スレッドを明示的に閉じていないため、この場合はVMがそれを処理すると思いました。