使用闹钟管理器即使应用程序关闭?

我正在使用一个Alarm Manager来更新一个带有Service的小部件。 我有两个不同的问题。

第一个问题:我使用Alarm Manager的意图呼叫该服务。 喜欢这个:

alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
Intent i = new Intent(context, MyService.class);
pi = PendingIntent.getService(context, 0, i, PendingIntent.FLAG_UPDATE_CURRENT);

context.startService(new Intent(context, MyService.class));

Long repeat = Long.parseLong(prefs.getString("update_preference", "600"));
alarmManager.setInexactRepeating(AlarmManager.RTC_WAKEUP, Calendar.getInstance().getTimeInMillis(), 1000*repeat, pi);

这是错的吗?

它外观和工作正确。 但是当我看到工作服务时,我看不到列表中的服务名称。 也许它不是作为单独/单独的服务运行。 刚刚看到应用程序名称(而不是服务)。 我不知道如何分开或者重要吗?

另一个问题:长期以来,运行控制小部件更新的应用程序以某种方式关闭 (手动或通过任务杀手)。 当然, Alarm Manager会停止,小部件的功能也会停止。 例如按钮点击。

但是,Twitter解决了这个问题。 虽然小部件处于活动状态,但如果关闭控制小部件的主应用程序(Twitter)而不是单击小部件,则会以某种方式触发小应用程序,并重新启动。 所以按钮正常工作。 这怎么可能?

任何帮助,将不胜感激。


您不需要执行context.startservice即将执行的目标是什么,如果您希望该服务第一次立即运行,只需将其设置为在当前时间运行,然后从当前时间设置时间间隔即可。

当你不需要setRepeating时,你也设置了两种不同的重复类型,其中setInexact不是,并且可以在操作系统被setInexact时调整,因此它不精确。 你想要一个或另一个不是两个。

此外,这些时间间隔非常小,它将大大杀死电池。

它应该是这个

alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
Intent i = new Intent(context, MyService.class);
pi = PendingIntent.getService(context, 0, i, PendingIntent.FLAG_UPDATE_CURRENT);

Long repeat = Long.parseLong(prefs.getString("update_preference", "600"));
alarmManager.setInexactRepeating(AlarmManager.RTC_WAKEUP,
                      Calendar.getInstance().getTimeInMillis(), 1000*repeat, pi);

你的应用程序/服务不是一直在运行,这很好。 事实上,它不需要/必须一直运行来更新小部件。 如果您使用AlarmManager安排Intent,则应用程序将在意图如果已关闭时触发。

链接地址: http://www.djcxy.com/p/59369.html

上一篇: Using Alarm Manager Even If App closed?

下一篇: Can anyone compare Google Guice and Spring DI?