如果我的应用程序没有运行,AlarmManager会工作吗?

我有一个闹钟,工作正常,如果我正在与我的应用程序进行交互(使用),但它不适用,如果我设置为第二天,而不是与我的应用程序进行交互。因此,我怀疑是因为我的应用程序进程不运行那时候。

这是我正在做的

Calendar calSet = Calendar.getInstance(); calSet.set(Calendar.HOUR_OF_DAY, selectedhour); calSet.set(Calendar.MINUTE, selectedminute); calSet.set(Calendar.YEAR, year); calSet.set(Calendar.MONTH, monthOfYear); calSet.set(Calendar.DATE, dayOfMonth); alarm = new Intent(ActivityA.this, Service.class); pendingIntent = PendingIntent.getService(getApplicationContext(), i++,alarm, 1); alarmanager.set(AlarmManager.RTC_WAKEUP, calSet.getTimeInMillis(),pendingIntent); 

Solutions Collecting From Web of "如果我的应用程序没有运行,AlarmManager会工作吗?"

从AlarmManager中

AlarmManager提供对系统报警服务的访问。 这些允许您安排您的应用程序在未来的某个时间点运行。 当警报closures时, 已经注册的Intent 被系统广播,如果目标应用程序尚未运行,则会自动启动。 注册的警报在设备处于睡眠状态时保留(如果在此期间closures设备,可以select将设备唤醒),但是如果closures并重新启动,则会被清除。


以简单的方式,它将工作,直到您的设备已重新启动。

您可以在重新启动后阅读Android AlarmManager,其中@CommonsWare已经给出了他的示例应用程序的链接,即使在设备重新启动后,它仍然会持续报警。


请忽略下面的部分,这似乎是无效的。 我将在未来删除

你可以阅读更多关于如何创build一个持久的AlarmManager的应用程序kill,以及如何在应用程序查杀后保存报警? 可以给你关于如何处理这个问题的想法(如果应用程序已被杀死,坚持警报)

是的,它的工作,但正确的理解见doc。

注意:“报警pipe理器”适用于希望在特定时间运行应用程序代码的情况,即使您的应用程序当前未在运行。 对于正常的定时操作(滴答,超时等),使用Handler更容易,效率更高。

看到这里http://developer.android.com/reference/android/app/AlarmManager.html

我们需要在应用程序pipe理器的自动启动pipe理器中启用我们的应用程序,一些手机如Vivo v5,

在体内v5,我们可以find这个菜单

 iManager > App Manager > Auto Start Manager > Enable our app here. 

然后,如果应用程序被杀或closures,你的报警/警报pipe理器将触发报警。

查看AlarmManager文档

http://developer.android.com/reference/android/app/AlarmManager.html

我没有看到任何地方说,杀死你的应用程序将删除该应用程序预定的所有警报。 更具体地说,它表明如果你的应用程序没有启动,它会为你启动它。

我做了我自己的testing,并可以validation这个..

  • 在未来5秒钟内设置闹钟。
  • 然后closures最近的应用程序。
  • 然后看日志我的广播被接收。
  • 记住这是用签名的apk完成的。

     Calendar cal = Calendar.getInstance(); cal.add(Calendar.MILLISECOND, 5000); AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); alarmManager.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), pendingIntent); 

我还要记住Pankaj Kumar关于启动时重启警报的说法。 这是您需要覆盖的地方,因为AlarmManager会清除设备重新启动时的所有报警。