Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/211.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android AlarmManager是否要求PendingEvent为BroadcastReceiver类型?_Android_Broadcastreceiver_Alarmmanager_Android Pendingintent_Intentservice - Fatal编程技术网

Android AlarmManager是否要求PendingEvent为BroadcastReceiver类型?

Android AlarmManager是否要求PendingEvent为BroadcastReceiver类型?,android,broadcastreceiver,alarmmanager,android-pendingintent,intentservice,Android,Broadcastreceiver,Alarmmanager,Android Pendingintent,Intentservice,的文档似乎暗示(但并不明确要求)传入任何set()方法的类型应该是该类型,但我测试了传入其他组件类型(如),它似乎工作正常 使用非意图是否安全?是的,它一直都是有效的,但我怀疑不是按照你的想法。您可以使用任何带报警器的悬挂式帐篷;这确实可能是一项活动或服务悬而未决。如果它是一个服务PendingEvent,那么当警报触发时,操作系统将为您调用startService()。隐藏的陷阱是关于唤醒警报的行为 当任何警报触发时,操作系统代表发送方持有唤醒锁,直到发送挂起的内容为止,此时唤醒锁被释放,设备

的文档似乎暗示(但并不明确要求)传入任何
set()
方法的类型应该是该类型,但我测试了传入其他组件类型(如),它似乎工作正常


使用非意图是否安全?

是的,它一直都是有效的,但我怀疑不是按照你的想法。您可以使用任何带报警器的悬挂式帐篷;这确实可能是一项活动或服务悬而未决。如果它是一个服务PendingEvent,那么当警报触发时,操作系统将为您调用startService()。隐藏的陷阱是关于唤醒警报的行为

当任何警报触发时,操作系统代表发送方持有唤醒锁,直到发送挂起的内容为止,此时唤醒锁被释放,设备可以重新进入睡眠状态。“只要它需要交付”的确切含义取决于使用的是哪种吊坠

广播传递本质上被视为同步:wakelock由Alarm Manager保持,直到接收者的onReceive()回调返回。这就很难保证在onReceive()中执行的任何处理都能在设备不休眠的情况下继续进行

然而,活动和服务的交付并不以同样的方式等待收件人。有了这些类型的报警挂起功能,设备保持清醒的时间足以开始启动目标活动或服务的过程,但在启动开始后,在目标代码实际有机会运行之前,它可以(并且确实)立即回到睡眠状态。在实践中,这意味着使用服务挂起功能时,即使警报是唤醒警报,服务通常也不会实际执行,直到设备作为一个整体被正常唤醒,例如,下次用户手动打开屏幕时

有时这没关系,如果您的代码实际上并不关心,即使闹钟在凌晨3点启动,服务直到早上7点才开始运行,这时闹钟熄灭并点亮手机很长一段时间。不过,更常见的情况是,应用程序需要使用广播警报,然后在其onReceive()中——知道设备一回来就会休眠——获取自己的唤醒锁并在该唤醒锁下启动服务,等等


有一个很棒的支持库类,叫做WakefulBroadcastReceiver,它封装了这个alarm wakelock服务舞蹈,使它既简单又防弹;是的。如果您想要启动服务以响应唤醒警报,请使用该选项。

根据您链接的
pendingent
文档,您可以看到它说您可以使用
活动
广播接收器
服务
我看到了,但是我没有在
pendingent
中看到任何
AlarmManager
特定的措辞。我想知道
AlarmManager
是否使用
PendingEvent
做了正确的事情,我传入了设备唤醒时是否会处理意图?是的。这与某个应用程序在设备进入睡眠状态时调用startService()或startActivity()完全相同。这不会中止操作;直到有东西再次唤醒设备,它才开始处理启动。谢谢-我找不到任何关于此的文档-我非常感谢链接;)-您可能需要回答以下问题: