使用Alarm Manager即使App已关闭?

我使用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会停止,小部件的function也会停止。 例如按钮点击。

但是,Twitter解决了这个问题。 当窗口小部件处于活动状态时,如果我关闭主要应用程序(Twitter) – 它控制窗口小部件 – 而不是单击窗口小部件,不知何故窗口小部件触发应用程序并且它再次启动。 按钮工作正常。 怎么可能?

任何帮助,将不胜感激。

您不需要将context.startservice用于挂起的意图,如果您希望服务在第一次运行时立即运行,只需将其设置为在当前时间运行,然后从当前时间设置间隔。

当你不需要setRepeating is strict时你也设置了2种不同types的重复,其中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,那么当意图被触发时,应用程序将被启动。