2

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

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

4

2 回答 2

2

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

如何创建一个持久的 AlarmManager

于 2013-04-29T07:49:41.783 回答
0

报警服务完成后,使用am.cancel(pi)

于 2013-04-29T07:47:03.937 回答