【问题标题】:My android alarms are being cancelled, and not by me我的安卓闹钟被取消了,不是我取消的
【发布时间】:2012-05-15 21:53:24
【问题描述】:

我的应用使用闹钟计时器每隔 2 分钟左右检查一次服务器上的更新。我使用这个创建了一个循环计时器:

    alarmIntent = new Intent(context, OnWakeUpReceiver.class);
    PendingIntent pIntent = PendingIntent.getBroadcast(context, 0, alarmIntent, 0);

    mAlarmManager.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), 120000, pIntent);

对于绝大多数人来说,这很好用。但是少数人报告说该应用程序突然停止自我更新。我做了一个简单的检查,看看定时器是否存在:

    PendingIntent pIntent = PendingIntent.getBroadcast(context, 0, alarmIntent, PendingIntent.FLAG_NO_CREATE);   

果然,当应用不再更新时,这个返回null,表示没有定时器仍然存在。

我的应用程序一直在控制闹钟计时器(在没有网络连接时将其关闭,然后在有网络连接时将其重新打开,以及其他情况)。我想也许我以某种方式将其关闭而不是重新打开。因此,我创建了一个版本,在该版本中,我删除了所有取消闹钟计时器的呼叫。所以我的应用程序不再有任何方法来取消该计时器。但仅仅几天后,闹钟再次消失,应用程序也没有更新。

我无法在我自己的系统上实现这一点,或者让某人找到一种万无一失的方法在他们的系统上重复它。我想知道是不是 Android 系统取消了它(尽管这会阻止我的应用程序再次运行),但在其中一个问题较多的系统上,他说他的手机上几乎没有运行任何东西。

我不知道任务杀手是否也会杀死闹钟计时器,但我明白,在我认为 SDK 8 之后,任务杀手无论如何都不能再这样做了,而且我在发布版本 8 时遇到了问题。并且还可以在不运行任务杀手且未获得 root 权限的系统上。

我什至创建了一个“看门狗”警报计时器,它运行一个接收器来检查主应用计时器是否已停止更新。我发现那个计时器也被取消了(它没有提供进一步的“最后一次运行”更新,也从未注意到主应用程序已停止)。

这个问题对我来说是一个应用杀手。任何人都可以提出任何方法来尝试调试何时以及发生了什么?当计时器被取消时,系统是否有任何日志条目,无论是系统还是其他原因?我讨厌它消失得无影无踪。

【问题讨论】:

  • 设备重启后告警是否依然存在?
  • 我从未检查过,但我认为每次手机启动时我都必须重新创建闹钟计时器。我有一个 OnBoot 接收器可以做到这一点。
  • 如果有人关闭数据计划和无线应用程序如果无法连接到服务器会崩溃,或者它是否正常失败并创建另一个警报?
  • 确实,重启电源后警报会被清除。 stackoverflow.com/questions/5616769/…
  • 不,它可以抵抗缺少数据连接。我已经非常彻底地测试过了。但即使不是,它也是一个重复的警报计时器,所以它应该每 2 分钟发生一次,即使接收它的广播接收器崩溃,对吗?我不会每次都重置计时器(主要是因为我很担心这种情况,崩溃或其他问题会阻止我重置闹钟,因此应用程序将永远不会再次唤醒)。

标签: android android-intent android-alarms


【解决方案1】:

我不能说这是完整的答案,但是这两个变化似乎已经停止了很多被取消的警报:

1) 我采用未决意图并取消它,而不是当我出于任何原因不得不取消警报时在警报管理器上调用 cancel()。随着时间的推移,我不知道这是否会混淆警报管理器或其他什么,但它可能并不好。现在我取消了警报管理器以及挂起的意图。

2) 我的一位用户提到当他们点击 Clear RAM 时,它会禁用我的服务。显然,有些手机带有一个任务管理器,它为它们提供了一个漂亮的闪亮按钮,可以让它们清除内存/RAM。该按钮甚至清楚地表明按下它会导致某些应用程序停止工作......并且用户仍然会捣碎它。我不知道到底是怎么回事,但这似乎在大多数情况下都会扼杀我的警报。所以我发布了一个重要的通知,让人们停止这样做,从那时起事情就真的平静下来了。糟糕的一面是,如果用户按下了死亡魔法按钮,或者真的出了什么问题,我将永远不会真正知道下次我收到禁用警报时。

但不管怎样,现在情况好多了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-11
    • 1970-01-01
    • 2018-12-26
    相关资源
    最近更新 更多