Java 在不锁定屏幕的情况下延迟环路

Java 在不锁定屏幕的情况下延迟环路,java,android,loops,delay,Java,Android,Loops,Delay,我一直在开发一个应用程序,需要在其中获取设备的位置。问题是,我想尝试至少5或10次,每次尝试之间需要一个延迟,以便在每次尝试失败后在屏幕上显示错误消息LocationMsg。我之所以希望延迟,是因为有时gps开始工作并获得实际位置需要一些时间。我尝试了很多东西,但都没能成功。这个想法是要有一个类似于“终端”的界面,在这里我将显示一条消息错误,然后重试1/5。。错误2/5。。。。每次尝试之后。问题是,我尝试过使用Handler和Thread.sleep,但我总是锁定屏幕,每次尝试后都看不到屏幕上显

我一直在开发一个应用程序,需要在其中获取设备的位置。问题是,我想尝试至少5或10次,每次尝试之间需要一个延迟,以便在每次尝试失败后在屏幕上显示错误消息LocationMsg。我之所以希望延迟,是因为有时gps开始工作并获得实际位置需要一些时间。我尝试了很多东西,但都没能成功。这个想法是要有一个类似于“终端”的界面,在这里我将显示一条消息错误,然后重试1/5。。错误2/5。。。。每次尝试之后。问题是,我尝试过使用Handler和Thread.sleep,但我总是锁定屏幕,每次尝试后都看不到屏幕上显示的错误消息

这是我获取位置的方法:

int breakloop=0;
private void GetLocation(){

    locationmanager=(LocationManager)getSystemService(Context.LOCATION_SERVICE);
    Criteria cri=new Criteria();
    String provider=locationmanager.getBestProvider(cri,false);

    if(provider!=null & !provider.equals("")){
        //Get location
        final Location location=locationmanager.getLastKnownLocation(provider);
        locationmanager.requestLocationUpdates(provider,2000,10,this);


        while(breakloop<10){
            breakloop++;
            if(location!=null)
                onLocationChanged(location);
            else
                FailedLocationMSG(breakloop);
        }

    }else
       Toast.makeText(getApplicationContext(),"Provider is null",Toast.LENGTH_LONG).show();

}
您可以使用FutureTask和Callable进行位置检查,并等待其返回值

public class LocationChecker implements Callable<Location> {
    @Override
    public Location call() throws Exception {
        //do your stuff for location check
        return location;
    }
}
在你的方法中,你做了如下事情

LocationChecker lc = new LocationChecker();
FutureTask<Location> ft = new FutureTask<Location>(lc);
ExecutorService es = Executors.newCachedThreadPool();
es.execute(ft);

Location loc;
int attempts = 0;
while(attempts < 10) {
    if(ft.isDone() && loc != null) {
        es.shutdown();
        break;
    }        
    else if(ft.isDone() && loc == null) {
        ft = new FutureTask<Location>(lc);
        es.execute(ft);
        attempts++;
    }

    loc = ft.get();
}

这将检查您的位置并等待十次结果。

您面临的问题是什么?您只指定了要执行的操作,请添加有关确切问题的详细信息。我已尝试使用Handler和Thread.sleep,但我始终锁定屏幕,每次尝试后都看不到屏幕上显示的错误消息。