Я создал класс, расширяющий поток, чтобы получать местоположение пользователя через LocationManager в потоке, не являющемся пользовательским интерфейсом.Я реализовал это как поток, потому что он должен запускаться по запросу и выполнять свою работу только в течение ограниченного времени.Кстати, мне пришлось добавить объект Looper в поток, чтобы иметь возможность создать обработчик для LocationManager (onLocationChanged).
Это код:
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 устарели, какой будет хороший способ, по крайней мере, в этом случае, сделать поток с кубиком с петлителем?
Заранее спасибо;)