2012-03-21 44 views
3

我的应用程序使用闹钟计时器每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 。还有那些不运行任务杀手的系统,还没有被植根。

我甚至创造了跑了接收器只是为了检查,看看主要的应用程序定时器已经停止更新“看门狗”报警定时器。我发现那个计时器也被取消了(它没有给出进一步的“上次运行”更新,并且从未注意到主应用程序已经停止)。

这个问题对我来说是一个应用程序的杀手锏。任何人都可以提出任何方法来尝试调试什么时候发生什么?当定时器被系统或其他东西取消时,系统是否有任何日志条目?我讨厌它只是毫无痕迹地蒸发掉。

+0

设备重新启动后,警报是否仍然存在? – 2012-03-21 16:58:26

+0

我从未检查过,但我认为每次手机启动时都必须重新创建闹钟计时器。我有一个OnBoot接收器可以做到这一点。 – Rob 2012-03-21 17:38:49

+0

如果有人关闭数据计划,并且无线会在应用程序无法连接服务器时崩溃,或者无法正常失败并创建另一个警报? – 2012-03-21 20:25:57

回答

1

我不能说这是一个完整的答案,但这些变化2一起似乎已经停止了大部分取消报警:

1)我正在挂起的意图和取消一个,而不是调用取消闹钟管理器()时,无论出于何种原因我必须取消闹钟。随着时间的推移,我不知道是否设法混淆了报警管理器或什么的,但可能并不好。现在我取消警报管理器以及待处理的意图。

2)我的一位用户提到他们何时点击清除RAM,它会禁用我的服务。显然有些手机带有一个任务管理器,可以给他们一个不错的闪亮按钮,让他们清除内存/内存。该按钮甚至说清楚,按下它会导致一些应用程序停止工作......并且仍然是用户混搭它。我不知道如何,但是这似乎杀死了大部分时间我的警报。所以我发出了一个大通知让人们停止这样做,从那以后,事情真的平静下来了。糟糕的一面是,如果用户点击死亡魔法按钮,或者确实发生了问题,我将永远不会真正知道下次发生禁用警报。

但无论哪种方式,现在情况会更好。