Android 确保所有任务都在onLocationChanged方法中执行

Android 确保所有任务都在onLocationChanged方法中执行,android,locationmanager,locationlistener,Android,Locationmanager,Locationlistener,我在onLocationChanged方法中做了很多工作,我想锁定该方法,直到所有工作都完成,即使位置管理器达到它的条件 例如,我有以下代码: private LocationManager _locMgr; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.acti

我在onLocationChanged方法中做了很多工作,我想锁定该方法,直到所有工作都完成,即使位置管理器达到它的条件

例如,我有以下代码:

private LocationManager _locMgr;
protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
                _locMgr = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
            _locMgr.requestLocationUpdates(LocationManager.GPS_PROVIDER, 2000, 2, this);
}

public void onLocationChanged(Location location) {

//do alot of job

 }
我面临的问题是,如果locationManager中的时间大于2秒且大于2米,则即使没有完成任务,它也会执行onLocationChanged()


请有人帮我解决这个问题。

如果您确定在完成之前调用了onLocationChanged(),请尝试以下操作:

声明一个活动字段
private bolean isAllDone=true
声明一个锁对象
private final object lock=new object()

然后在onLocationChange测试它:

public void onLocationChanged(Location location) {

    if(isAllDone){
        synchronized (lock){
            if(isAllDone){
                isAllDone = false;
                //do alot of job
                isAllDone = true;
            }
        }
    }
}

只需更改米数和秒数?@user251182我尝试过这样做,但我不知道在onLocationChanged()中执行所有任务所需的确切时间,因此如果我知道确切时间,我将根据时间更改米数和秒数!谢谢你,雷马尔,我还没试过,但我有个问题。。这是否可以确保即使再次调用onLocationChanged()方法,也能完成所有任务?好的,我已经阅读了有关synchronized的内容,它肯定能完成任务:))非常感谢您的帮助,非常感谢。