Android AlarmManager不可理解的行为

Android AlarmManager不可理解的行为,android,android-service,alarmmanager,android-pendingintent,Android,Android Service,Alarmmanager,Android Pendingintent,我知道AlarmManager被讨论了好几次,但我真的找不到一个对我有帮助的答案。我有一个应用程序,需要在特定时间启动服务并制作一些东西,所以经过一些研究工作,我决定AlarmManager是我所需要的 我用这个代码来做这项工作 Intent myIntent=new Intent(); ComponentName cn=new ComponentName("my.package.name", "my.package.name.AlarmService"); myInte

我知道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分钟或2小时,它就会正常工作(我在服务的第一条指令中写入一个登录文件)。如果我执行

    adb shell dumpsys alarm
    adb shell dumpsys alarm
我可以看到我所有未完成的意图。好的,很高兴看到一切正常,我将我的行动安排在:

凌晨1:00 上午8:00 上午8:40 上午9时15分 下午1:00 下午二时 下午18:00

设置此操作后,我执行

   adb shell dumpsys alarm
我可以看到所有悬而未决的意图。然后我去睡觉,然后。。。。。当我早上7:30醒来时,计划在凌晨1:00执行的操作尚未执行,如果我执行

    adb shell dumpsys alarm
    adb shell dumpsys alarm
我所有等待的意图都消失了


我真的对这种行为感到沮丧,因为我花了很多时间编写这个应用程序,却无法使它正常工作。经过几周的研究,我发布了这个问题,因为我尝试了每一件事,但我仍然有这个问题。请从
AlarmManager
()的文档中帮助我:

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

如果您的
服务
也没有设置正确的唤醒锁,则当
AlarmManager
完成时,设备将立即返回睡眠状态,您也需要在代码中对此进行管理


HTH

大家好,首先非常感谢您的回答。你能给我一个链接到一个很好的例子来做这件事吗?我不是一个非常专业的android开发者,关于这一点,有很多事情让我感到困惑。。提前感谢您的帮助我将从PowerManager文档开始,因为这是您的应用程序代码在“睡眠”期间执行时需要获得唤醒锁的方式:再次感谢,但是,当我一进入我看到的页面,我就用粗体写着:设备电池寿命将受到此API使用的显著影响,这是否意味着我的应用程序将耗尽用户的电池?这是我唯一能做到的方法吗?难道没有更好的方法在特定时间执行某些代码(不需要用户交互)而不消耗电池吗;您不能将设备从睡眠中唤醒以进行某些工作,而期望电池不会用于此工作。这些声明之所以存在,是为了让您知道,您应该明智地使用这些API,并且不要让设备保持清醒的时间超过您工作所需的时间。无限期地保持唤醒锁会耗尽电池,就像让GPS一直开着一样。好吧,你是对的,这是一个愚蠢的立场,但在这一点上,有一点我并不理解:如果我将我的等待意图设置为提前2分钟,然后让手机进入睡眠状态(使用开/关按钮),在该动作执行后,我再次打开手机,我看到该动作已执行。但是,当我按照主要问题中的解释设置操作时,第二天早上,我所有未决的意图都不存在了。我遗漏了什么?你使用的是什么设备/ROM?您是否尝试在其他设备上运行该应用程序?我在一台设备上遇到了完全相同的问题(Cyanogenmod 10.1.3,即Android 4.2.2)。然而,问题似乎并没有发生在不同的设备上(HTC Stock,Android 4.1)。你找到解决办法了吗?