我知道AlarmManager已多次讨论,但我真的找不到可以帮助我的答案。我有一个应用程序,需要在某个时间启动服务并制作一些东西,所以经过一些研究工作,我认为AlarmManager是我需要的。
我使用此代码来完成工作
Intent myIntent=new Intent();
ComponentName cn=new ComponentName("my.package.name", "my.package.name.AlarmService");
myIntent.setComponent(cn);
PendingIntent pendingIntent= PendingIntent.getService(alarm._context, alarm.id, myIntent, 0);
AlarmManager alarmManager = (AlarmManager) _context.getSystemService(Context.ALARM_SERVICE);
alarmManager.set(AlarmManager.RTC_WAKEUP, alarm.time, pendingIntent);
“警报”是我写的对象。 现在,我确信这个代码可以正常工作,因为如果我将一个(或多个)动作设置为2分钟或数小时,它可以工作(我在服务的第一条指令中写入一个登录文件)。如果我执行
adb shell dumpsys alarm
我可以看到所有待处理的意图。很高兴看到一切正常,我安排行动:
凌晨01:00 上午08:00 上午08:40 09:15:AM 下午01:00 02:00 PM 下午18:00
设置此操作后,执行
adb shell dumpsys alarm
我可以看到所有待处理的意图。然后我去睡觉.....当我早上07:30起床时,安排在凌晨01:00的行动尚未执行,如果我执行
adb shell dumpsys alarm
我所有待处理的意图都消失了!!!!!!!
我对此行为感到非常沮丧,因为我花了很多时间编写这个应用程序,但我无法使其正常工作。经过数周的研究,我发布了这个问题,因为我尝试了所有的东西,但我仍然有这个问题。请帮帮我
答案 0 :(得分:2)
来自AlarmManager
(link here)的文档:
只要报警,报警管理器就会保持CPU唤醒锁定 接收者的onReceive()方法正在执行。 这保证了 在完成广播处理后,手机才会睡眠。 一旦onReceive()返回,Alarm Manager就会释放此唤醒锁定。 这意味着手机在某些情况下会尽快睡觉 onReceive()方法完成。如果你的报警接收器被调用 Context.startService(),手机可能会睡眠 在请求的服务启动之前。 为了防止这种情况,你的 BroadcastReceiver和Service需要实现单独的唤醒 锁定策略以确保手机继续运行直到 服务可用。
如果您的Service
也没有设置正确的唤醒锁定,那么当AlarmManager
完成后,设备将重新进入休眠状态,您需要在代码中对此进行管理。< / p>
HTH