【发布时间】:2012-06-03 09:43:59
【问题描述】:
我有一个由timer.scheduleAtFixedRate 定期运行的后台服务。
它每隔一段时间(例如 60 秒)就会唤醒并检查位置。
位置由locManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 60000, 5, listener);检查,实际位置从听者的onLocationChanged收集。
现在,当手机在外面并且 GPS 接收良好时,这可以正常工作。 但是,如果手机在里面,GPS 几乎总是处于活动状态 - 寻找信号,并且电池会迅速耗尽。
为了准确控制 GPS 活动时间,我使用 Handler 和 Runnable 创建了另一个线程:
我使用了locManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, listener); 和locManager.removeUpdates(listener);,所以我可以根据需要打开和关闭 GPS。
在这种情况下,我可以打开 GPS 的确切时间,但发现即使 10 秒后它也无法锁定接收良好的区域。所以在这里我再次耗尽电池......
我使用的是 API 级别 7,因此我不能使用 locationManager.requestSingleUpdate。
我有两个问题:
- 有没有办法优化这个过程?
- 升级到 API 级别 9(并使用
locationManager.requestSingleUpdate)会显着改善流程吗?我的意思是,它值得升级吗?
【问题讨论】:
-
不是一个真正的答案,但我可以告诉你,手机 GPS 系统有时需要几分钟而不是十秒钟才能得到修复(可能取决于手机型号)。一旦找到,未来的修复会更快——可能在 10 秒的限制内。也许每隔一刻钟就花两三分钟尝试修复?或者也许有一些方法可以获取足够的细节来更快地判断是否有一个好的信号。