requestLocationUpdates

requestLocationUpdates

我需要将requestLocationUpdates()放在一个单独的线程中,以免它阻塞应用程序的其余部分(它将在大多数时间运行)。最好的方法是什么?

最佳答案

当您调用requestLocationUpdates()时,这只是表示您希望在用户位置更改时被回调。这个调用不需要很长时间,可以在主线程上进行。
当用户的位置发生变化(并基于您传递给requestLocationUpdates()的条件)时,您的侦听器将通过onLocationChanged()回调或通过Intent通知(取决于您传递给requestLocationUpdates()的参数)。如果您在onLocationChanged()中做了大量的处理,那么您不应该在主线程上运行此方法,而应该只启动一个后台线程(或者将Runnable发布到后台线程并在后台线程上执行您的工作)。
另一个选项是启动HandlerThread并将Looper中的HandlerThread作为参数提供给requestLocationUpdates()。在这种情况下,对onLocationChanged()的回调将在HandlerThread上进行。看起来像这样:

    HandlerThread handlerThread = new HandlerThread("MyHandlerThread");
    handlerThread.start();
    // Now get the Looper from the HandlerThread
    // NOTE: This call will block until the HandlerThread gets control and initializes its Looper
    Looper looper = handlerThread.getLooper();
    // Request location updates to be called back on the HandlerThread
    locationManager.requestLocationUpdates(provider, minTime, minDistance, listener, looper);

08-19 09:10