如何等待我的线程到大于零的纬度和经度
Posted
技术标签:
【中文标题】如何等待我的线程到大于零的纬度和经度【英文标题】:How to wait my thread up to the latitude and longitude greater than zero 【发布时间】:2013-05-22 22:40:46 【问题描述】:在我的 android 应用程序中有一个启动屏幕,它检查 gps 并获取纬度和经度。当用户打开 gps 并运行我的应用程序时,它不会等待位置修复。该应用程序只显示一个错误对话框并退出。所以我插入了一些代码等待执行到大于零的经纬度。但这不起作用。它只是等待和等待。任何帮助将不胜感激。
这是我的代码
if(gps.getLatitude()==0.0&&gps.getLongitude()==0.0)
while(gps.getLatitude()>0.0&&gps.getLongitude()>0.0)
try
new Thread()
public void run()
try
// calling background Async task to load Google Places
new LoadPlaces().execute();
catch (Exception e)
Log.e("inside thread", e.getMessage());
.wait();
catch (InterruptedException e)
// TODO Auto-generated catch block
e.printStackTrace();
else
// calling background Async task to load Google Places
new LoadPlaces().execute();
【问题讨论】:
Lat 和 lng 可以是负数也可以是正数!(gps.getlatitude==0) 就这样,你还在等什么来自 gps 的坐标? 如果 lat 和 lng 都是正数,您的 while 循环将继续执行并等待 如果刚刚打开gps,位置值为null,因此纬度和经度值将为0.0,因为它不能为null,其类型为double @agen451 您正在线程中加载异步任务。请检查链接@developer.android.com/reference/android/os/AsyncTask.html。我还评论了您之前看起来相似的问题 @Raghunandan,因为他没有明确启动线程。他的可运行代码将在同一个现有线程中运行。 【参考方案1】:您的 UI 线程不应该执行像 Thread.wait()
这样的阻塞调用:这样做会冻结整个线程,从而导致应用程序无响应 (ANR) 对话框(或死锁或终止)。阅读有关 Processes and Threads 和 Keeping Your App Responsive 的 Android 开发人员指南:在开始编写多线程代码之前,了解它们所涵盖的内容很重要。
然后,通读Making Your App Location-Aware 指南:特别是Receiving Location Updates。这解释了如何获取最后一个已知位置(如果有),并实现 LocationListener
以接收更新。
【讨论】:
如果我在这个 if 块中使用另一个异步任务来检索大于 0 的位置会更好吗? 您使用多少AsyncTask
s 并不重要:重要的是您不会在UI 线程中阻塞等待它们中的任何一个。在这种情况下,您可能不想启动任何额外的任务:定位服务已经是一个单独的进程。您要做的是创建并注册一个LocationListener
,如这些指南中所述,以接收回调并更新您的 UI(例如,通过关闭启动屏幕)。【参考方案2】:
您可以使用 LocationListener.onLocationChanged 来查看位置变化
【讨论】:
以上是关于如何等待我的线程到大于零的纬度和经度的主要内容,如果未能解决你的问题,请参考以下文章