如何在Android多线程程序中停止looper.loop()?

时间:2011-01-26 12:18:01

标签: android multithreading gps

目前,我正在尝试开发Android应用程序。应用程序首先从GPS读取位置数据(直到onLocationUpdates(GPS_PROVIDER, 0, 0 , Listener),如果GPS无法在特定时间内检索数据(在我的情况下为5秒),它会再次询问{{1} }(通过Network provider)。

在我的程序中,我按如下方式处理了这个任务。

onLocationUpdates(NETWORK_PROVIDER,0,0, Listener)

现在我的OnLocationChanged侦听器代码如下:

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.

}
}

现在我的问题是,当我运行此代码时,工作线程从不调用public void onLocationChanged(Location location) { // Listener got location // First Intrupt the sleeping Thread mWorker.interrupt(); if ( loc != null ) { //get Location } } 侦听器。

我在工作线程中插入了OnLocationChanged,调用了looper.Loop()。但它持续运行,OnLocationChanged没有停止。我应该如何阻止looper

是否有 其他 方式,我可以管理上述任务,looper.loop()除外 如果您需要更多说明,请告诉我。

1 个答案:

答案 0 :(得分:0)

不要在主线程上使用Thread.sleep()。你阻止它运行。没有必要为你正在做的事情设置一个单独的线程,你只需要允许你的主线程继续运行,这样你就可以在收到回调时处理事件。