【问题标题】:Killing service kills repeating alarm杀死服务杀死重复警报
【发布时间】:2013-04-29 07:31:18
【问题描述】:

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

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

【问题讨论】:

    标签: android service alarmmanager


    【解决方案1】:

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

    How to create a persistent AlarmManager

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-09-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多