我的应用程序使用闹钟计时器每2分钟左右检查一次服务器上的更新。我创建一个定期使用此计时器:我的android闹钟正在取消,而不是我
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);
果然,当应用程序将不再更新,这回空,表示没有计时器仍然存在。
我的应用程序已被控制的报警定时器(关闭它在没有网络连接,然后重新打开它的时候有,和其他情况)。我想也许我是以某种方式关闭它,而不是把它重新开启。所以我创建了一个版本,我删除了每个呼叫以取消闹钟计时器。所以我的应用程序不再有任何方法取消该计时器。但几天之后,警报计时器不再存在,应用程序不再更新。
我一直没能得到这样的事情发生在我自己的系统,或者让别人找到万无一失的方法重复上他们的。我想知道是否Android系统取消了它(尽管这会阻止我的应用再次运行),但是在其中一个更有问题的系统中,他说他几乎没有任何东西在电话上运行。
我不知道任务杀手是否也会杀死闹钟定时器,但我明白,在我认为SDK 8之后,任务杀手无法再这样做了,而且我一直在使用post 8 。还有那些不运行任务杀手的系统,还没有被植根。
我甚至创造了跑了接收器只是为了检查,看看主要的应用程序定时器已经停止更新“看门狗”报警定时器。我发现那个计时器也被取消了(它没有给出进一步的“上次运行”更新,并且从未注意到主应用程序已经停止)。
这个问题对我来说是一个应用程序的杀手锏。任何人都可以提出任何方法来尝试调试什么时候发生什么?当定时器被系统或其他东西取消时,系统是否有任何日志条目?我讨厌它只是毫无痕迹地蒸发掉。
设备重新启动后,警报是否仍然存在? – 2012-03-21 16:58:26
我从未检查过,但我认为每次手机启动时都必须重新创建闹钟计时器。我有一个OnBoot接收器可以做到这一点。 – Rob 2012-03-21 17:38:49
如果有人关闭数据计划,并且无线会在应用程序无法连接服务器时崩溃,或者无法正常失败并创建另一个警报? – 2012-03-21 20:25:57