петля.
дал класс, расширяющий поток, чтобы получить местоположение пользователя через 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 не получит новые местоположения).
Но таким образом, предполагая, что методы остановки и приостановки потока устарели, каков был бы хороший способ, по крайней мере, в этом случае, сделать поток с лупером умереть?
Заранее спасибо ;)