我的应用程序使用闹钟计时器每 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 时遇到了问题。不运行任务杀手的系统,并且没有被植根。
我什至创建了一个“看门狗”警报计时器,它运行一个接收器只是为了检查主应用程序计时器是否已停止更新。我发现那个计时器也被取消了(它没有提供进一步的“最后一次运行”更新,也从未注意到主应用程序已停止)。
这个问题对我来说是一个应用程序杀手。任何人都可以提出任何方法来尝试调试何时以及发生了什么?当计时器被取消时,系统是否有任何日志条目,无论是系统还是其他原因?我讨厌它消失得无影无踪。