2011-01-26 3 views
2

В настоящее время я пытаюсь разработать приложение для 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. Если вам нужно больше разъяснений, просто дайте мне знать.

+0

Почему вы хотите запустить это в отдельной теме? – getekha

ответ

0

Не используйте Thread.sleep() для основной нити. Вы блокируете его. Нет необходимости иметь отдельный поток для того, что вы делаете, вам просто нужно, чтобы ваш основной поток продолжал работать, чтобы вы могли обрабатывать события через ваши обратные вызовы по мере их получения.

Смежные вопросы