Android 终止服务终止重复报警

Android 终止服务终止重复报警,android,service,alarmmanager,Android,Service,Alarmmanager,在我的Android应用程序中,我使用AlarmManager发出的重复警报来启动我的服务。一切正常。然而,如果我进入系统设置,我会注意到我的应用程序正在运行,即使服务已经完成了它的工作,并且已经停止了自己。不知道为什么系统显示它仍在运行。如果我通过在系统设置中关闭应用程序来强制停止应用程序,我的警报将不会重复。以下是设置报警的代码: AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);

在我的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会跟踪此上下文,如果服务终止,它可能也会终止报警


是否有任何方法可以使用不是从报警传入的上下文的上下文启动服务?也许通过这样做,我可以防止报警被终止。

完成报警服务后,使用
am.cancel(pi)
如果用户手动终止您的服务或应用程序,报警将被终止,并且在用户手动启动服务或应用程序(或设备重新启动)之前不会再次重复-即使报警设置为重复。那太糟糕了。见: