来自WakefulBroadcastReceiver的连续警告消息

时间:2014-04-03 19:52:48

标签: android alarmmanager android-wake-lock

我使用Alarm Manager每5分钟获取一次触发器。 警报接收器扩展WakefulBroadcastReceiver并在接收警报触发器时通过startWakefulService(context,service)启动IntentService。在服务中接收onHandleIntent(Intent intent)方法中的意图后,应用程序会执行一些所需的操作,并在此方法结束时通过调用AlarmReceiver.completeWakefulIntent(intent)来释放唤醒锁。

我的应用程序运行正常但在logcat中我看到了WakefulBroadcastReceiver的警告消息。

Tag: WakefulBroadcastReceiver Warning message: No active wake lock id #1

每次触发时都会出现这些警告消息,#number每次都会增加。 我想知道应用程序设置的警报是否存在问题,因为消息的数量逐渐增加。或者仅仅因为警报管理器没有创建wale-lock,我的应用程序正试图通过completeWakefulIntent将其删除。

2 个答案:

答案 0 :(得分:3)

很可能startWakefulServiceonHandleIntent在不同的进程中执行。在这种情况下,调用静态AlarmReceiver.completeWakefulIntent将表现得好像它起作用,但由于在该进程空间中找不到实际的唤醒锁定,您将收到该警告消息。

答案 1 :(得分:1)

确保您在Android清单中正确输入了WAKE_LOCK权限。如果您忘记或错误输入了它,那么startWakefulService将启动该服务,但之后会无声地失败。您不会在日志cat中看到任何突出显示问题的明显内容。

就我而言,Android Studio已自动完成'WAKE_LOCK'作为小写'wake_lock'。该服务确实启动了,但startWakefulService从未完全返回,我通过日志验证。某种例外情况正在加剧。

public class FooBroadcastReceiver extends WakefulBroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        Log.d(TAG, "Fpp receiver fired. Starting bar service");

        Intent serviceIntent = new Intent(context, BarService.class);
        startWakefulService(context, serviceIntent);
        Log.d(TAG, "Started bar service"); // << never reached!
    }

每当BarService调用completeWakefulIntent时,我遇到问题的主要指示是“没有活动唤醒锁定ID”消息显示在日志中。

最后,我的麻烦都发生在代码在同一物理过程中执行,所以第一个答案不适用。

注意:我的体验是运行Kitkat 4.4.2的三星Galaxy Note 10。