【问题标题】:Sending “keep alive message” even if the device is in the sleep mode即使设备处于睡眠模式,也发送“保持活动消息”
【发布时间】:2013-07-31 10:25:38
【问题描述】:

我有一个前台服务,它使用ScheduleTaskExecutor 定期向服务器发送一条消息。间隔为 15 秒,不能再长了。

我想我已经阅读了关于 SO 的类似要求的几乎所有内容,但是,在 Android 2.3.x 的设备上,执行程序在设备进入睡眠模式后停止执行 - 即按下电源按钮后。

我也尝试过使用 AlarmManager:cwac-wakeful,但结果完全一样。

还有什么我可以尝试的吗?我怀疑这是操作系统中的错误。

【问题讨论】:

    标签: android android-intent android-service


    【解决方案1】:

    我有一个前台服务,它使用 ScheduleTaskExecutor 定期向服务器发送一条消息。间隔为 15 秒,不能再长了。

    如果这是针对消费类设备的,那么这是您的应用程序的可怕行为。您可能会在 Play 商店中获得负面星级。

    我想我已经阅读了关于 SO 的类似要求的几乎所有内容,但是,在 Android 2.3.x 的设备上,执行程序在设备进入睡眠模式后停止执行 - 即按下电源按钮后。

    也许您没有获得WakeLock。而且,根据相关设备上的连接选项,您可能还需要WifiLock 才能获得可靠的结果。

    我也尝试过使用 AlarmManager: cwac-wakeful 但结果完全一样。

    WakefulIntentService 不是为频繁运行的东西而设计的。你也可以抓住自己的WakeLock 永远持有,或者直到电池耗尽,或者直到设备的用户向你开枪。

    还有什么我可以尝试的吗?

    使用日志记录(您的和系统的)来准确确定发生了什么和没有发生什么。使用 adb shell dumpsys power 确认您的WakeLock 的状态。

    【讨论】:

    • 感谢您的回复!这是一个出租车应用,每个司机的手机里都有这个应用,应用必须更新司机的位置,让客户知道司机在哪里。 10分钟后,一个司机可以离他最后一个位置20公里……这就是更新如此频繁的原因。我不能使用日志记录,因为当设备连接到 IDE 时它不会发生,即使它处于睡眠模式。该应用程序肯定会耗尽电池电量,但客户要求很明确:使用 GPS 获取位置并每 15 秒将其发送到服务器......
    • 这也是我使用前台服务的原因——通知用户他的手机上正在运行一个耗电的应用程序。
    • @vitakot:“我不能使用日志记录,因为当设备连接到 IDE 时不会发生这种情况”——即使您没有连接到 IDE 也会发生日志记录。当您稍后插入设备时,您可以检查您的日志。这甚至只是使用 LogCat。如果您将自己的单独日志作为文件维护,则您可以控制这些文件中的内容、存储位置、删除时间等。
    猜你喜欢
    • 2017-10-21
    • 2021-12-24
    • 2017-06-08
    • 2012-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多