目前,我正在尝试开发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()
除外
如果您需要更多说明,请告诉我。
答案 0 :(得分:0)
不要在主线程上使用Thread.sleep()。你阻止它运行。没有必要为你正在做的事情设置一个单独的线程,你只需要允许你的主线程继续运行,这样你就可以在收到回调时处理事件。