【问题标题】:Wake Service directly from AlarmManager直接从 AlarmManager 唤醒服务
【发布时间】:2011-09-16 11:40:31
【问题描述】:

https://github.com/commonsguy/cwac-wakeful 演示中,调用 OnAlarmReceiver(一个 BroadcastReceiver)的 onReceive() 方法来响应警报。 onReceive() 方法启动服务。使用了两种 Intent,一种由 BroadcastReceiver 接收,另一种由 Service 接收。这似乎更复杂,为什么不让服务从 AlamManager 接收 Intent?

我知道电话在 onReceive() 执行时保证不会休眠,即它用唤醒锁包裹。我不确定 Service 类是否提供任何类似的保证。

有什么方法可以直接从警报启动服务,同时仍然保证手机将从睡眠中唤醒并且在获得唤醒锁之前不会进入睡眠状态?

【问题讨论】:

    标签: android commonsware


    【解决方案1】:

    这似乎更复杂了,为什么不让服务从 AlamManager 接收 Intent?

    因为 Android 不能保证设备将保持唤醒状态的时间足够长,以便调用 getService() PendingIntent。保证适用于getBroadcast() PendingIntent -- Android 确保设备在您的onReceive() 通话期间保持唤醒(通过WakeLock)。

    相信我,我希望我们可以跳过它。

    【讨论】:

    • 哦,太好了 - 我也在想同样的事情 - 显然是 in the simple alarm example from the API samples this is not a concern - 还是我错过了什么?
    • @Mr_and_Mrs_D:那个样本有很多问题,甚至都不好笑。总有一天,我会提出一个问题,希望能得到改变。
    • 拜托(也提到comments)——在我对Android的短暂了解中,我已经看到了比以往更多的笨拙、错误、不优雅、令人困惑的代码。真是一团糟!
    • 这是在哪里记录的?你能@CommonsWare 指出我的来源吗?
    • @VitoValov:“这是在哪里记录的?” -- 除了 Dianne Hackborn 的一些旧的 android-developers Google Group 帖子和相关材料之外,它不是。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-11-09
    • 1970-01-01
    • 1970-01-01
    • 2011-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多