我稍微搜索了一下,关于GCM的wakelock的真正功能有一个问题。
wakelock是否防止设备进入睡眠模式,使网络层无法关闭--因此它可以首先从网络层接收GCM消息
或者当通过清单权限、正确编码的GCM代码等启用并工作时,它将始终具有到Google GCM的网络连接,wakelock仅需要在UI或应用程序级别上打开屏幕,以便您可以在接收后进行其他操作(与用户交互等)。
以上某些内容/没有(请详细说明 :)
谢谢 geremy
我稍微搜索了一下,关于GCM的wakelock的真正功能有一个问题。
wakelock是否防止设备进入睡眠模式,使网络层无法关闭--因此它可以首先从网络层接收GCM消息
或者当通过清单权限、正确编码的GCM代码等启用并工作时,它将始终具有到Google GCM的网络连接,wakelock仅需要在UI或应用程序级别上打开屏幕,以便您可以在接收后进行其他操作(与用户交互等)。
以上某些内容/没有(请详细说明 :)
谢谢 geremy
根据我的经验,您需要获取WAKE_LOCK
来启动GCM服务
,然后释放它,因为在启动服务之前,您的CPU不应该休眠。
当您的屏幕关闭后,CPU将在一段时间后进入睡眠模式。当您的设备处于睡眠模式时,您的线程将被挂起。
如果您获取了唤醒锁并且没有释放它,那么它肯定会消耗大量电池电量。
您可以在设备处于空闲状态时接收GCM消息。
当消息到达时,取决于您的代码是否唤醒设备并显示通知。
您还可以使用标志delay_while_idle
延迟消息,直到设备退出空闲状态。
您可以通过注册BroadcastReceiver来处理消息。
请参考SO上的问题和答案: