android - 查杀服务查杀重复报警

标签 android service alarmmanager

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

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

最佳答案

如果用户手动终止您的服务或应用程序,警报就会被终止,并且在用户手动启动服务或应用程序(或设备重新启动)之前,警报不会再次重复 - 即使警报设置为重复。好吧,那很糟糕。请参阅:

How to create a persistent AlarmManager

关于android - 查杀服务查杀重复报警,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16273360/

相关文章:

Android UI 线程消息队列调度顺序

java - 当绑定(bind)的客户端断开连接时通知 Android 服务

java - MySQL查询抛出异常,而不是一个空的ResultSet

database - 带有数据库连接的 Delphi 中的 Windows 服务

android - 来自另一个线程的回调导致异常

android - 预定的警报管理器不工作 Android

android - 闹钟不该响的时候响

android - 无法停止使用 alarmManager 启动的服务

android - 使用 Google 登录的 Azure 移动授权错误

android - 在 Android 设备上呈现 webview 与来自同一父级的先前 sibling 重叠