2014-01-28 80 views
1

我有一个前景服务(START_STICKY因此对于“被操作系统杀死”的方面没有问题),为了导航目的,每2秒接收一次位置(GPS)更新。我不采取任何唤醒。我的问题是:我需要一个唤醒键来避免深度睡眠?或者位置更新足以“运行”?GPS定位和深度睡眠

+0

通过接收者或听众位置更新? –

+0

@Mr_and_Mrs_D通过注册列表程序 – greywolf82

回答

2

在Android代码挖掘之后,回应是:不,你不需要它。 Android会为你取一个唤醒锁(LocationManagerService),直到onLocationChange结束或者你的广播接收器收到这个意图。如果你做了一些异步工作(启动一个intent服务,在onLocationChange中发布一些代码等等),那么你需要创建你自己的部分唤醒锁。

0

我在应用程序中做了同样的事情(但我使用接收器来接收我推荐的位置更新 - 有很多听众的错误报告)。你的方式有2个问题:

  1. 服务威力关闭反正
  2. 服务将最终入睡 - 我不知道为什么你没有遵守这一

正确的方法是通过AlarmManager注册闹钟 - 闹钟会唤醒接收器。从onReceive()您必须启动一个WakefulIntentService这将为您管理锁。

请参见:

编辑:2秒是真的经常。这会杀死电池 - 预计评级非常低 - 或者将间隔提高。

+0

该服务可能会关闭,但对于具有粘性行为的我也可以。由于现在我没有看到任何问题,而且我也没有得到任何有关这类问题的报告。实际上,我使用单独的前台HandlerThread,并在注册位置列表程序时使用Thread.getLooper()使用此线程。 – greywolf82