Rob*_*Rob 5 android android-intent android-alarms
我的应用程序使用闹钟定时器每2分钟左右检查服务器上的更新.我使用这个创建一个定期计时器:
alarmIntent = new Intent(context, OnWakeUpReceiver.class);
PendingIntent pIntent = PendingIntent.getBroadcast(context, 0, alarmIntent, 0);
mAlarmManager.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), 120000, pIntent);
Run Code Online (Sandbox Code Playgroud)
对于绝大多数人来说,这很好用.但是有少数人报告该应用程序突然停止更新.我进行了一个简单的检查,看看计时器是否存在:
PendingIntent pIntent = PendingIntent.getBroadcast(context, 0, alarmIntent, PendingIntent.FLAG_NO_CREATE);
Run Code Online (Sandbox Code Playgroud)
当然,当应用程序不再更新时,返回null,表示没有计时器仍然存在.
我的应用程序一直在控制闹钟定时器(当没有网络连接时将其关闭,然后在有其他情况时将其重新打开).我想也许我在某种程度上把它关掉而不是把它重新打开.所以我创建了一个版本,我删除了每个调用以取消闹钟定时器.所以我的应用程序不再有任何取消该计时器的方法.但仅仅几天后,警报计时器再次出现,应用程序没有更新.
我无法在我自己的系统上实现这一点,或者让某人找到一种万无一失的方式在他们的系统上重复它.我想知道Android系统是否可能取消它(虽然这会阻止我的应用程序再次运行),但在一个更多的问题系统上,他说他几乎没有任何东西在手机上运行.
我不知道任务杀手是否也会杀死闹钟定时器,但是我知道在我认为SDK 8之后,任务杀手无论如何都无法做到这一点,而且我在发布第8版时遇到了问题.没有运行任务杀手的系统,并没有扎根.
我甚至创建了一个"看门狗"闹钟计时器,它运行一个接收器,只是为了检查主应用程序计时器是否已经停止更新.我发现那个计时器也被取消了(它没有进一步的"最后运行"更新,并且从未注意到主应用程序已停止).
这个问题对我来说是一个app杀手.任何人都可以建议任何方式甚至尝试调试何时以及发生了什么?当计时器被取消时,系统是否有任何日志条目,无论是系统还是其他东西?我讨厌它只是消失得无影无踪.
我不能说这是完整的答案,但这两个更改似乎已经停止了大部分已取消的警报:
1)我正在接受待处理的意图并取消它,而不是当我出于某种原因不得不取消警报时在警报管理器上调用cancel()。随着时间的推移,我不知道这是否让警报管理器感到困惑或其他什么,但这可能不太好。现在我取消了警报管理器以及待处理的意图。
2) 我的一位用户提到,当他们点击“清除 RAM”时,它会禁用我的服务。显然,有些手机配备了任务管理器,为它们提供了一个漂亮的闪亮按钮,可以让它们清除内存/RAM。该按钮甚至清楚地表明,按下它会导致某些应用程序停止工作......但用户仍然会捣乱它。我不知道到底是怎么回事,但这似乎大多数时候都会终止我的闹钟。所以我发布了一个大通知,要求人们停止这样做,从那时起事情就真正平静下来了。糟糕的一面是,我永远不会真正知道下次我收到禁用警报时,用户是否按下了死亡魔法按钮,或者是否真的出了问题。
但无论如何,现在情况好多了。
| 归档时间: |
|
| 查看次数: |
1091 次 |
| 最近记录: |