Threadを拡張するクラスを作成して、UI以外のスレッドでLocationManagerを介してユーザーの場所を取得しました。リクエストに応じて開始し、限られた時間だけ作業を行う必要があるため、これをスレッドとして実装しました。ちなみに、LocationManager(onLocationChanged)のハンドラーを作成できるようにするには、スレッドにLooperオブジェクトを追加する必要がありました。
これはコードです:
public class UserLocationThread extends Thread implements LocationListener {
//...
public void run() {
try {
Looper.prepare();
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, this);
Looper.loop();
Looper.myLooper().quit();
} catch (Exception e) {
//...
}
}
@Override
public void onLocationChanged(Location location) {
locationManager.removeUpdates(this);
//...
handler.sendMessage(msg); //this is the handler for communication with father thread
}
//...}
スレッドを開始し、ユーザーの場所データを受信し(この場合は一度だけ)、ハンドラーへのメッセージを介してデータをメインスレッドに送信してから、終了します。問題は、私の場合、runメソッドが終了すると、スレッドが停止しなくなることです(そうしないと、onLocationChangedが新しい場所を受け取らないため、問題ありません)。
しかし、このように、スレッドのstopメソッドとsuspendメソッドが非推奨になったとすると、少なくともこの場合、ルーパーダイを使用してスレッドを作成するための良い方法は何でしょうか。
前もって感謝します ;)