在我的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会跟踪这个上下文,如果服务死了,它可能也会杀死警报。
有没有办法可以使用不是从闹钟传入的上下文的上下文来启动我的服务?也许通过这样做,我可以防止警报被杀。
答案 0 :(得分:1)
如果用户手动杀死您的服务或应用程序,警报将被终止,并且在用户手动启动服务或应用程序(或设备重新启动)之前不会再次重复警报 - 即使警报设置为重复。那很糟糕。参见:
答案 1 :(得分:0)
报警服务完成后,使用am.cancel(pi)