重复服务模具

时间:2018-07-13 18:25:59

标签: android android-service

我有一个AppWidget,它每15秒从服务器请求一次数据。为此,我调用以下startAlarm()方法以使AlarmManager以给定的偏移量启动服务。服务完成小部件的更新后,它将再次调用此startAlarm()方法。

static void startAlarm(Context context, Class intent) {
    final AlarmManager m = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
    final Intent i = new Intent(context, intent);
    final long triggerAtMillis = System.currentTimeMillis() + (refreshRate * 1000);

    final PendingIntent p = PendingIntent.getService(
            context, 0, i, PendingIntent.FLAG_CANCEL_CURRENT);

    if (m != null) m.setExact(AlarmManager.RTC, triggerAtMillis, p);
}

我重复调用setExact()而不是单个setRepeating()来获得低于1分钟的刷新率。只要打开设备屏幕,它就可以正常工作,但是如果它关闭时间太长,则Intent将永远不会发送,并且该服务不会再次运行。我认为它会在一段时间后被系统杀死,并考虑设置一个接收器以在设备屏幕打开时再次触发该服务,但据我了解,这似乎会耗尽电池电量。 / p>

如果我在设备的开发人员选项中查看正在运行的服务,则可以看到该服务仍在运行,这使我认为该服务仍处于启动状态但尚未完成,因此下一次调用startAlarm()永远不会。因此,在服务的onStartCommand()中,我尝试返回START_REDELIVER_INTENT,从查看文档来看这似乎是我想要的,但是仍然挂起。

0 个答案:

没有答案