requestLocationUpdates()在单独的Thread中

时间:2015-03-23 19:53:34

标签: android location android-location

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

1 个答案:

答案 0 :(得分:17)

当您拨打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);