我有一个后台服务,它定期由timer.scheduleAtFixedRate
. 它会每隔一段时间(例如 60 秒)醒来并检查位置。
位置被检查,locManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 60000, 5, listener);
实际位置是从听者的onLocationChanged
.
现在,当手机在外面并且 GPS 接收良好时,这可以正常工作。但是,如果手机在里面,GPS 几乎总是处于活动状态——寻找信号,电池很快就会耗尽。
我使用 Handler 和 Runnable 创建了另一个线程,以准确控制 GPS 活动时间:我使用了locManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, listener);
,locManager.removeUpdates(listener);
因此我可以根据需要打开和关闭 GPS。在这种情况下,我可以打开 GPS 的确切时间,但发现即使 10 秒后它也无法锁定接收良好的区域。所以在这里我再次耗尽电池...
我正在使用 API 级别 7,因此我无法使用locationManager.requestSingleUpdate
. 我有两个问题:
- 有没有办法优化这个过程?
- 升级到 API 级别 9(并使用
locationManager.requestSingleUpdate
)会显着改善流程吗?我的意思是,它值得升级吗?