我不太确定如何解释GCM客户端文档中的这个句子:
android.permission.WAKE_LOCK权限允许应用在接收到消息时防止处理器休眠。可选-只有当应用程序想要防止设备休眠时才使用。
.
如果在将工作转移到服务时不持有唤醒锁,则实际上允许设备在工作完成之前返回睡眠状态。结果是,应用程序可能直到将来的某个任意时间才能完成处理 GCM 消息,这不是您想要的。使用 WakefulBroadcastReceiver 不是必需的。如果您有一个相对简单的应用程序不需要服务,您可以在常规 BroadcastReceiver 中拦截 GCM 消息并在那里进行处理。
我不确定我的应用程序是否需要持有唤醒锁(或者是否需要服务)。 推送通知部分对于应用程序非常重要,它不应该被延迟超过几分钟。 BroadcastReceiver 在接收所有数据之前是否会被挂起?
com.google.android.gms:play-services-gcm:8.4.0
)中,GcmReceiver
只要没有唤醒锁权限就可以正常工作(如@RobMeeuwisse所提到的)。在v8.4.0之前,如果没有唤醒锁权限使用GcmReceiver
会导致崩溃。在没有唤醒锁权限时,v8.4.0会显示警告:"缺少唤醒锁权限,服务启动可能会延迟"。 - user1652110