Android 调用BroadcastReceiver时是否需要获取唤醒锁
我在书中发现: Android在调用广播服务时获得部分唤醒锁,并在从主线程中的服务返回时释放该锁 这是否意味着Android操作系统将确保设备在经历Android 调用BroadcastReceiver时是否需要获取唤醒锁,android,broadcastreceiver,android-broadcast,android-wake-lock,android-geofence,Android,Broadcastreceiver,Android Broadcast,Android Wake Lock,Android Geofence,我在书中发现: Android在调用广播服务时获得部分唤醒锁,并在从主线程中的服务返回时释放该锁 这是否意味着Android操作系统将确保设备在经历BroadcastReceiver的onReceive时醒来?在我的情况下,BroadcastReceiver应该从Google Play Services(准确地说是Google LocationServices)获得一个意图 记录在哪里? 编辑:我还找到了: 因为可以保证BroadcastReceiver.onReceive()在CPU进入睡眠状
BroadcastReceiver
的onReceive
时醒来?在我的情况下,BroadcastReceiver
应该从Google Play Services(准确地说是Google LocationServices)获得一个意图
记录在哪里?
编辑:我还找到了:
因为可以保证BroadcastReceiver.onReceive()在CPU进入睡眠状态之前始终完全执行
没有所谓的“广播服务” 此外,您还需要阅读包含第二条引语的整篇文章,因为对于由
AlarmManager
触发的广播,这是唯一的。持有唤醒锁的是AlarmManager
,而不是广播Intent
机制。此外,正如在那篇博文中所指出的,黛安娜·哈克伯恩证实了这一行为,她是安卓系统的核心工程师
这是否意味着Adnroid OS可确保设备在通过BroadcastReceive时唤醒
不一般
在我的例子中,BroadcastReceiver应该从GooglePlay服务(GoogleLocationServices,确切地说是Geofences api)获得意图
如果Google Play Services文档没有对您的接收器在唤醒方面的行为做出任何声明,您应该假设您不在唤醒锁
内。如果工作需要1-2毫秒,因此在onReceive()
中可能是安全的,欢迎您冒险跳过WakeLock
,并希望一切顺利
但通常这样的广播会触发更多的工作,包括磁盘I/O和/或网络I/O,您需要从主应用程序线程中获得这些工作。通常,您可以通过委托给IntentService
来实现这一点,因为它为您提供了一个带有标记服务的后台线程,让操作系统知道您仍在这里做一些工作。并且,为了确保设备在完成该工作之前保持清醒,请使用WakefulBroadcastReceiver
或myWakefulIntentService
,从onReceive()
的早期开始,一直保持WakeLock
,直到onHandleIntent()中的工作完成
记录在哪里
哎呀,不是。习惯它,对于复杂的系统来说,通常只有一小部分的系统行为被记录下来