GCM-App真的需要唤醒锁吗?

Joh*_*uer 12 android wakelock google-cloud-messaging

我不太确定如何在GCM客户端文档中解释这句话:

android.permission.WAKE_LOCK权限,以便应用程序可以在收到消息时使处理器无法休眠.可选 - 仅在应用程序希望防止设备休眠时使用.

.

如果在将工作转换为服务时未保持唤醒锁定,则有效地允许设备在工作完成之前返回休眠状态.最终结果是应用程序可能无法完成处理GCM消息,直到将来某个任意点,这不是您想要的.

不要求使用WakefulBroadcastReceiver.如果您有一个不需要服务的相对简单的应用程序,您可以在常规的BroadcastReceiver中拦截GCM消息并在那里进行处理.

我不太确定我的应用程序是否需要召唤唤醒锁(或者如果它需要服务).推送通知部分对应用程序非常重要,不应该延迟超过几分钟.在接收所有数据之前,BroadcastReceiver是否有可能被暂停?

Com*_*are 5

在接收所有数据之前,BroadcastReceiver是否有可能被暂停?

不会.在下载完整的4K或更少的有效负载并且可供您使用之前,您将无法获得控制权.

但是,onReceive()在主应用程序线程上调用,因此如果您的工作需要超过一毫秒左右,您应该使用WakefulBroadcastReceiver和执行IntentService该工作.或者,如果您愿意,请使用WakefulIntentService和常规BroadcastReceiver.

  • 那么它只会显示一个通知,但我认为即使这需要超过一毫秒.如果已启动的意图在显示通知之前被发送到睡眠状态,究竟会发生什么?它会永远消失还是会在电话再次唤醒后继续工作? (2认同)
  • `GcmReceiver`可以使用和不使用唤醒锁.它会检查应用程序是否具有"WAKE_LOCK"权限,以决定是否在启动服务之前获取唤醒锁定.完成后,`GcmListenerService`调用`GcmReceiver.completeWakefulIntent()`,如果获取了唤醒锁,则释放唤醒锁. (2认同)