【问题标题】:AlarmManager deleted - force close appAlarmManager 已删除 - 强制关闭应用程序
【发布时间】:2013-08-19 09:25:55
【问题描述】:

我这几天一直在寻找解决方案。甚至可能没有解决方案。

会发生以下情况: 我有一个应用程序,它为用户安排警报,让用户起床。警报“始终”响起非常重要。

为了能够让闹钟响起,我使用了 AlarmManager。这会安排在预定时间执行的意图。当应用程序使用返回/主页按钮打开或关闭时,这工作正常。

当我使用强制关闭选项关闭应用程序时,警报管理器警报会从系统中清除,并且不会响起。

我已经尝试了以下方法:

  • START_STICKY 服务
  • DefaultUncaughtExceptionHandler - 不起作用,因为没有捕获到强制关闭应用程序的异常。
  • 广播接收器 - 问题在于警报被删除。

我想知道是否有人遇到过关于 AlarmManager 类的相同问题,以及您是否找到了解决此问题的解决方案或替代方法。

附言我正在创建这样的警报管理器警报:

            Intent myIntent = new Intent(getApplicationContext(), CheckAlarmService.class);

            PendingIntent pendingIntent = PendingIntent.getService(getApplicationContext(),
            1, myIntent, PendingIntent.FLAG_UPDATE_CURRENT);
            AlarmManager alarmManager = (AlarmManager)getApplicationContext().getSystemService(ALARM_SERVICE);

            Calendar calendar = Calendar.getInstance();

            int daysTillAlarm = AlarmHelper.calculateDaysTillAlarm(alarm);
            calendar.add(Calendar.DATE, 0);
            calendar.set(Calendar.HOUR_OF_DAY, 15);
            calendar.set(Calendar.MINUTE, 0);
            calendar.set(Calendar.SECOND, 0);

            alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent);

编辑:

为了试试看是不是只有我一个人有这个问题,我下载了一些很好用的闹钟。他们似乎都有和我一样的行为。现在我会离开它。他们的评价也很好。

如果你能解决这个问题,我想知道!

【问题讨论】:

  • 我正在考虑同样的问题。它变得有问题,因为 kitkat 中存在一个错误,即使您开始粘贴它也不会重新启动服务。

标签: android alarmmanager


【解决方案1】:

尝试更改您的代码:

PendingIntent pendingIntent = PendingIntent.getService(getApplicationContext(),
            1, myIntent, PendingIntent.FLAG_UPDATE_CURRENT);

到:

PendingIntent pendingIntent = PendingIntent.getService(getApplicationContext(),
            1, myIntent, 0);

也尝试添加:

alarmManager.cancel(pendingIntent);

之前:

alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent);

【讨论】:

  • 我试过了,但我认为它不起作用并且它不起作用。这些 FLAGS 是要说明我想用 PendingIntent 做什么。 (更新、新建、取消存在然后创建)。无论如何感谢您的建议!
  • @ThijsLimmen 请检查已编辑的答案。安装您的应用的新副本,然后尝试
  • 这也没用。我很好奇。你有没有在你的任何应用程序上使用它?或者你可能会想到强制关闭,以不同的方式关闭。例如,我有一个三星 Galaxy S2。当应用程序打开时,我长按主页按钮。然后我会看到进程菜单。在那里我点击“结束”。此力关闭应用程序。仅从此时清除警报管理器。以任何其他方式隐藏/关闭都可以。
  • @ThijsLimmen 你在 logcat 中遇到什么错误,请发布它
  • 没有错误。我设置的警报管理器在强制关闭时被清除。我找到了几种解释它的发生。您在答案下方看到的一个。这可能是为了防止人们制造病毒。
【解决方案2】:

在我看来(作为 Android 用户),这是正确的行为。想象一下存在导致崩溃的错误的应用程序(带有崩溃对话框),并且该应用程序安排了每分钟启动一些操作。每分钟出现一次崩溃对话框,您可以做什么?

所以我希望您的问题没有直接答案(例如“只需调用此方法”)。 与往常一样,有一些丑陋的方法 - 比如启动几个进程来跟踪所有其他进程并在需要时重新启动,但随后您的应用程序开始看起来像病毒......

【讨论】:

  • 你是对的。这些东西我读了很多遍。我仍在寻找解决方案。这种讨厌的方式可能只是我需要做的方式,以获得我想要的行为,但也许有人有更好的解决方案。感谢您的回答!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多