В настоящее время я пытаюсь разработать приложение для Android. Приложение считывает данные о местонахождении от GPS
первой (через onLocationUpdates(GPS_PROVIDER, 0, 0 , Listener)
и если GPS
не в состоянии восстановить данные в определенное время (в моем случае 5 секунд), он снова просит Network provider
(через onLocationUpdates(NETWORK_PROVIDER,0,0, Listener)
).Как остановить looper.loop() в программе Android Multithreading?
В моей программе я обработал . эта задача следующим образом
mWorker = new WorkerThread();
mWorker.start(); // Thread creation and Calling run() Method
class WorkerThread extends Thread{
public void run() {
try {
if(isGPSEnabled){
//Call GPS_PROVIDER for Location updates,
//Will get location value in Location Change Listener
requestLocationUpdates(GPS_PROVIDER,0,0,Listener);
Log.d(TAG,"GPS Listener is registered and thread is going for Sleep");
Thread.sleep(THREAD_SLEEP_TIME);
}else if (isNetworkEnbles){
// if GPS_PROVIDER is not available, will call to NETWORK_PROVIDER
// Will get location value to OnLocationChangeListener
requestLocationUpdates(NETWORK_PROVIDER,0,0,listener);
Log.d(TAG,"NETWORK Listener is registered and thread is going for Sleep");
Thread.sleep(THREAD_SLEEP_TIME);
}
} catch (InterruptedException e){
// Thread is interrupted on OnLocationChange Listener
// Thread has been Interrupted, It means.. data is available thru Listener.
}
// Thread had sleep for THREAD_SLEEP_TIME , but Still data is not available
If (GPS or Network data isnt available thru GPS listener or Network Listener) {
// Do try for one more time.
}
}
Теперь мой OnLocationChanged код Слушатель следующим образом:
public void onLocationChanged(Location location) {
// Listener got location
// First Intrupt the sleeping Thread
mWorker.interrupt();
if (loc != null)
{
//get Location
}
}
Теперь моя проблема, когда я запускаю этот код, Worker Thread никогда не вызывает OnLocationChanged
Слушатель.
Я вставил looper.Loop()
в рабочий поток, OnLocationChanged
называется. Но он работает непрерывно, и looper
не останавливается. Как мне остановить looper.loop()
?
Есть ли другого пути, через который я могу управлять моими выше задачами, кроме workerThread.
Если вам нужно больше разъяснений, просто дайте мне знать.
Почему вы хотите запустить это в отдельной теме? – getekha