Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/98.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 当不使用广播接收器处理从Alarm Manager发送的IntentService时,是否需要获取唤醒锁?_Android_Intentservice_Wakelock - Fatal编程技术网

Android 当不使用广播接收器处理从Alarm Manager发送的IntentService时,是否需要获取唤醒锁?

Android 当不使用广播接收器处理从Alarm Manager发送的IntentService时,是否需要获取唤醒锁?,android,intentservice,wakelock,Android,Intentservice,Wakelock,我一直在阅读有关从广播接收器启动服务的内容。在这种情况下,我必须获得一个WakeLock,直到IntentService处理该意图 如果我直接从包装在悬挂式帐篷中的AlarmManager调用IntentService,会怎么样?在这个场景中没有广播接收器。。。意图直接转发到服务的OnHandleContent。那么,我从哪里获得锁呢?真的需要吗???一切似乎都很好。一个IntentService只是一个线程服务。你需要获得一个唤醒锁。Commonsguy有一个可爱的WakefulIntentS

我一直在阅读有关从广播接收器启动服务的内容。在这种情况下,我必须获得一个WakeLock,直到IntentService处理该意图


如果我直接从包装在悬挂式帐篷中的AlarmManager调用IntentService,会怎么样?在这个场景中没有广播接收器。。。意图直接转发到服务的OnHandleContent。那么,我从哪里获得锁呢?真的需要吗???一切似乎都很好。

一个
IntentService
只是一个线程服务。你需要获得一个唤醒锁。Commonsguy有一个可爱的WakefulIntentService

他的IntentService为您获取Wakelock,因此,如果您从AlarmService调用它,它将唤醒并在工作完成后释放该唤醒


我使用过allot,效果很好,源代码在Github上,因此您可以看到它是如何工作的。

我看过Commonsguy的实现,但在我的模式中没有BroadcastReceiver。据我所知,需要锁,因为一旦广播接收器的onReceive方法完成,如果手机处于睡眠状态,服务可能无法启动。然而,我根本没有使用任何广播接收器。。。AlarmManager有自己的锁,是AlarmManager启动IntentService而不是广播接收器。是的,但AlarmManager会在发送您的意向后释放锁,并且手机可能会在意向处理过程中断电。谢谢,根据您的评论,我正在使用锁定系统实现报警->接收器->服务模式。我假设如果使用经典服务而不是IntentService,也必须这样做,对吗?@HéctorJúdezSapena正确,
IntentService
扩展了
服务
,因此当您希望应用程序在设备处于睡眠状态时工作时,您需要唤醒锁。如果设备在处理intent时进入睡眠模式,会发生什么情况。如果没有什么不好的事情发生,那么不,您不需要锁。您的意思是在执行onHandleIntent方法时?因此,如果我在OnHANDLION开始时获得了锁并在最后释放它,我做的是正确的事情吗?是的,这应该防止一个交互。看起来像是从@公共SWARE的这个评论中,我被迫在中间使用广播接收器,我必须看他的课,但我想这是最安全的方式。然后,它处理正在排队和处理的意图。这样,您就不会错过活动,并且在处理活动时也不会受到干扰。