我想知道如何(如果可能的话)在一个短暂的服务中成功地为我的LocationManager
运行requestLocationUpdates
-在这种情况下是Android WearableListenerService
。
例如,我有一个服务,当可穿戴设备发送消息说它需要更新时运行。此更新的一部分是根据用户当前位置查询外部API的一些数据。如果没有从getLastKnownLocation
返回"最后已知"的位置,我将从位置管理器注册requestLocationUpdates
以获得设备的当前位置,然后将做我的事情。
然而,短命服务存在并且在位置管理器接收到位置更改事件之前被销毁,因此回调侦听器不会触发,或者我得到"在死线程上向处理程序发送消息"这样的错误。
我的问题是,我是否可以强制此服务或多或少阻塞,直到找到一个位置并且在退出(onDestroy
)之前调用onLocationChanged
回调触发?
或者,处理这个的适当/正确的机制是什么?
一种方法是在你的weararabelistenerservice中启动一个IntentService。在IntentService中,你可以在onHandleIntent()中发送你的位置请求,你可以阻塞它直到你得到你的响应(希望有一个超时);因为onHandleIntent是在工作线程上调用的,所以你不会引起任何问题。当你得到结果时,你可以更新你的可穿戴应用;这个方法看起来非常简单。