我有一个 Android 应用程序,该应用程序具有在后台运行的服务,与远程服务器通信并在需要时向用户显示通知。该应用程序还具有供用户交互的活动。
要求之一是应用程序需要在早上自动启动。在一天结束时,用户可以自由地退出应用程序(退出功能会停止服务,释放唤醒锁,并让 Android 终止进程)。为了自动重新启动应用程序,我正在使用 AlarmManager 和 PendingIntent 安排警报:
//create intent to alert OnStartReceiver when alarm goes off
Intent i = new Intent(context, OnStartReceiver.class);
i.setAction("com.pointtrace.intents.alarm");
i.addFlags(Intent.FLAG_DEBUG_LOG_RESOLUTION|Intent.FLAG_FROM_BACKGROUND);
//wrap inside PendingIntent so that it can be used from outside
//our application
PendingIntent pi = PendingIntent.getBroadcast(context, 1, i, PendingIntent.FLAG_ONE_SHOT);
AlarmManager alarms = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
Log.d("GXT", "Scheduling alarm action(i)=" + i.getAction());
//set alarm to go off at wake time
alarms.set(AlarmManager.RTC_WAKEUP, getWakeTime(), pi);
OnStartReceiver 类注册为接收广播,并在发生警报时重新启动应用程序。
除非用户从任务管理器中终止应用程序,否则一切正常。如果应用程序被 Android 操作系统杀死或我调用 System.exit(0) 正常退出;它重新启动正常。但是当它从任务管理器中被杀死时,看起来几乎就像警报被取消了。
我在 Android 文档中找不到任何暗示任务管理器会取消警报的内容。我在如何正确设置警报方面做错了吗?
我试过删除标志并只使用 0 但它没有任何区别。
谢谢。