Java 是否使用AsyncTaskLoader更新位置数据UI?

Java 是否使用AsyncTaskLoader更新位置数据UI?,java,android,multithreading,loader,fusedlocationproviderapi,Java,Android,Multithreading,Loader,Fusedlocationproviderapi,我正在为应用程序使用FusedLocationProvider API。设备的位置应该定期更新,因为预期用户将一直在移动,并且应用程序的行为应该根据当前设备位置的不同而有所不同 为了使主线程远离网络请求,我想将用于检索位置数据的代码移动到一个单独的加载程序中。但是,我不知道这部分代码应该放在哪里: locationRequest = LocationRequest.create() .setPriority(LocationRequest.PRIORITY_HIGH_AC

我正在为应用程序使用FusedLocationProvider API。设备的位置应该定期更新,因为预期用户将一直在移动,并且应用程序的行为应该根据当前设备位置的不同而有所不同

为了使主线程远离网络请求,我想将用于检索位置数据的代码移动到一个单独的加载程序中。但是,我不知道这部分代码应该放在哪里:

locationRequest = LocationRequest.create()
            .setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY)
            .setInterval(UPDATE_INTERVAL)
            .setFastestInterval(FASTEST_INTERVAL);


        try{
            LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, locationRequest, this);
        }catch (SecurityException a){Log.w(TAG,"No location permission.");}
如果我将其放入LoaderClass并在loadInBackground()中调用此方法,将出现错误
java.lang.NullPointerException:调用线程必须是准备好的循环器线程。

一次又一次地给加载器打电话也感觉很不对。 因此,我的问题是如何使用加载器实现RequestLocationUpdate,以便加载器更新我可以在onLoadFinished()中检索并更新相应UI的更改位置?我应该如何处理需要重写的位置侦听器的onLocationChanged()方法?或者是否有其他有效的方法将FusedLocationProvider移动到后台线程中

如果有人能在这里帮助我,那就太好了,非常感谢

或者是否有其他有效的方法将FusedLocationProvider移动到后台线程中?如果有人能在这里帮助我,那就太好了,非常感谢

若您想在后台线程中接收位置更新,可以使用循环器版本的
requestLocationUpdates
方法

在这种情况下,
onLocationChanged
方法将在活套线程上触发

private HandlerThread mLocThread;
private void initThread(){
    mLocThread = new HandlerThread("locationThread");
    mLocThread.start();
}

private void requestLocUpdates(){
    LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, 
    locationRequest, this, mLocThread.getLooper());
}

@Override
public void onLocationChanged(Location location) {
    // locationThread thread
}

谢谢你的快速回复!我真的很抱歉,我还没有那么熟悉android,因此我不太明白在我的情况下,活套线程是什么。这是否意味着我必须创建一个新的背景线程?是的,你是对的,但是这些主题不能用一条评论来描述。我更新了答案以给出更好的想法。你可以检查这个来了解线程和循环器是什么。好的,我读了你给我的链接和其他一些教程/文档,但是仍然有一些不清楚的地方:那么我必须创建一个runnable,在其中覆盖OnLocationChanged()?或者我必须在runnable中包含您上面编写的RequestRocUpdate吗?@Blackkara说位置更新将发生在我传入的活套线程上是正确的吗?关于循环器和线程的链接也很好。@NoobDogg是的,在onLocationChanged()方法中检查当前线程