在我的 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 会跟踪此上下文,如果服务终止,它可能也会终止警报。
有什么方法可以使用不是从警报传入的上下文来启动我的服务?也许通过这样做,我可以防止警报被杀死。