使用Alarm Manager即使App关闭了吗?

时间:2012-05-08 20:09:52

标签: android alarmmanager

我使用Alarm ManagerService更新小部件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的意图调用该服务。像这样:

Alarm Manager

是不是错了?

外观和工作正常。但是,当我查看工作服务时,我无法在列表中看到我的服务名称。也许它不是作为单一/单独的服务运行。刚看到应用程序名称(不是服务)。我不确定如何分离或重要?

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

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

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:3)

如果您希望服务在第一次立即运行时将其设置为在当前时间运行,那么您不需要执行context.startservice暂挂目标的操作,然后从当前时间设置间隔

当你不需要setRepeating严格而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); 时,你也设置了2种不同类型的重复,并且当它被触发时可以被操作系统调整,因此它不精确。你想要一个或另一个不是两个。

此外,这些间隔非常小,会严重损坏电池。

应该只是这个

{{1}}

答案 1 :(得分:1)

您的应用程序/服务并非一直在运行,这很好。 事实上,它不需要/必须一直运行来更新小部件。如果您使用AlarmManager安排一个Intent,那么当意图被关闭时,应用程序将被启动。