在我的Android应用程序中,我使用AlarmManager的重复警报来启动我的服务 . 一切正常 . 但是,如果我进入系统设置,我会注意到我的应用程序正在运行,即使服务已完成其中并且已停止运行 . 不确定为什么系统显示它仍在运行 . 如果我通过在系统设置中将其杀死来强制停止应用程序,则我的警报不会重复 . 以下是设置警报的代码:
AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
Intent i = new Intent("myapp.START_MONITORING");
PendingIntent pi = PendingIntent.getBroadcast(context, 0, i, 0);
am.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), elapsedTime, pi);
要开始我的服务,我执行以下操作:
Intent intent = new Intent(context, MyService.class);
ContextWrapper cw = (ContextWrapper) context;
cw.startService(intent);
请注意,用于设置警报和启动服务的上下文是相同的 . 它们位于相同的方法中 . 只要AlarmManager触发警报,就会将上下文传递给此方法 . 如果我在服务运行时杀了应用程序,理论上,服务应该在下一个时间间隔重新开始 . 但我怀疑AlarmManager跟踪这个上下文,如果服务死了,它可能也会杀死警报 .
有什么方法可以使用不是从警报传入的上下文的上下文来启动我的服务吗?也许通过这样做,我可以防止警报被杀死 .
2 回答
如果用户手动杀死您的服务或应用程序,警报将被终止,并且在用户手动启动服务或应用程序(或设备重新启动)之前不会再次重复警报 - 即使警报设置为重复 . 那很糟糕 . 看到:
How to create a persistent AlarmManager
报警服务完成后,使用
am.cancel(pi)