从我在AOSP代码中可以看到的情况来看,当Android触发调用注册位置接收器的意图时,wakelock会抓住a onLocationChanged.因此,您不需要进行wakelock处理,或者至少应该使用唤醒锁进行异步操作,onLocationChanged或者如果从接收器启动intentService等等.现在我的问题是:gps是否唤醒了CPU?我的意思是:当操作系统收到gps触发器时,唤醒锁授予信息可以处理,但之前?gps会产生中断来唤醒CPU吗?即使您使用接收器版本,它也不会授予您gps唤醒CPU,或者是监听器/ pendignIntent,就像alarmManager我们可以信任它的警报一样?是否需要抓住wakelock以保持系统接收信息?
我想也许你的想法有点倒退了。通常应用程序或用户会触发 GPS,而不是 GPS 触发唤醒锁。
标准
应用程序是否保持 GPS 唤醒很大程度上取决于Criteria
根据LocationManager.requestLocationUpdates(long minTime, float minDistance, Criteria c, PendingIntent i)方法文档:
位置更新间隔可以使用 minTime 参数来控制。位置更新之间的经过时间永远不会小于 minTime,尽管它可能更多地取决于位置提供程序实现和其他应用程序请求的更新间隔。
活跃供应商
GPS 和网络提供商被视为“活跃提供商”。两者都需要时间来启动并获得新的修复并消耗电池。
系统将尝试唤醒/使用活动提供程序来满足您的条件,如果您使用的是BroadcastReceiver,则onRecieve保证该方法完成。
如果您每小时请求一次 GPS,系统应该唤醒设备,运行 GPS 并每小时检查Criteria一次(假设提供商已启用)。
如果用户禁用提供程序,更新将停止,并且将发送提供程序可用性更新。一旦再次启用提供商,位置更新将立即恢复并发送提供商可用性更新。
其他问题和触发因素
这就是为什么他们建议考虑额外的监听触发器,例如启用或禁用提供程序时。这些可以与@danny177提到的内容结合起来,例如充电状态和电池电量。即使当前的网络状态在这里也很重要。
提供商还可以随时发送状态更新,以及特定于提供商的额外内容。如果提供了回调,则状态和可用性更新将通过 onProviderDisabled(String)、onProviderEnabled(String) 或 onStatusChanged(String, int, Bundle) 进行。或者,如果提供了待处理意图,则状态和可用性更新是带有额外键 KEY_PROVIDER_ENABLED 或 KEY_STATUS_CHANGED 的广播意图。
最后,您还可以使用被动提供程序。仅当其他应用程序为您唤醒活动提供商之一时,这才会为您提供更新。
如果您的应用程序想要被动地观察其他应用程序触发的位置更新,但又不想消耗任何额外的电量,那么请使用 PASSIVE_PROVIDER 该提供程序不会主动打开或修改主动位置提供程序
选址策略
一般来说,您希望从最不准确到最准确、从最低功率到最高功率等。例如,您可以使用 来PASSIVE_PROVIDER查看用户是否移动了 100 米以上。然后,如果有,则向网络提供商请求主动位置更新,以查看它们是否接近特定位置,如果是,则使用 GPS 进行更具体的操作。
请参阅:位置策略
确定使用和信任哪个是准确性、速度和电池效率之间的权衡问题。
谷歌播放服务
最后,您还可以使用 Google Play 服务作为位置提供程序并搭载其位置更新。这还为您提供“免费”地理围栏和地理编码。
| 归档时间: |
|
| 查看次数: |
931 次 |
| 最近记录: |