如何从AlarmManager启动服务

时间:2014-02-20 12:46:29

标签: android service alarmmanager

我需要启动一项服务,每隔x分钟进行一次长时间的操作。 为此,我有一个AlarmManager。在http://developer.android.com/reference/android/app/AlarmManager.html阅读文档我发现了这个:

只要警报接收器的onReceive()方法正在执行,警报管理器就会保持CPU唤醒锁定。这可以保证在您完成广播处理之后手机不会睡眠。一旦onReceive()返回,Alarm Manager就会释放此唤醒锁定。这意味着在某些情况下,只要onReceive()方法完成,手机就会休眠。如果您的警报接收器调用了Context.startService(),则手机可能会在启动所请求的服务之前休眠。为防止这种情况发生,您的BroadcastReceiver和服务需要实施单独的唤醒锁定策略,以确保手机在服务可用之前继续运行。

那么,我如何从AlarmManager启动服务并确保它启动。 我知道如何使用WakeLocks,但没有任何意义,我的意思是,我可以在服务中使用唤醒锁,但是文档说“手机可能会在所请求的服务启动之前睡觉”

2 个答案:

答案 0 :(得分:3)

Use WakefulBroadcastReceivermy WakefulIntentService

基本模式是让AlarmManager调用BroadcastReceiver,获取WakeLock并启动服务。然后该服务负责释放WakeLockWakefulBroadcastReceiverWakefulIntentService简单地捆绑了该模式并处理了一些边缘情况。

答案 1 :(得分:0)

  

@Ton,如果手机处于睡眠状态,您确定服务无法启动吗?   mode.I我不是100%肯定,但是,据我所知,它会开始,但你   如果您在该服务中使用互联网,则会遇到问题。