在android 6中GCM怎么处理处于Doze模式中的消息推送

原文链接:http://android-developers.blogspot.jp/2015/10/how-google-cloud-messaging-handles-doze.html

Android 在它6.0的版本 Marshmallow 中推出了一种用来节省手机电量的新特性,叫做“Doze”。在安卓设备没有连接电源时,如果安卓设备在屏幕熄灭后静止了一段时间后就会进入“Doze”模式。一旦设备进入“Doze”模式,系统就会推迟设备中应用的活动来达到省电的目的。它可以使设备周期性地恢复app的正常操作,叫做一个idle maintenance window, 用来处理app挂起的操作和网络请求。

如果你的app里面用到了GCM,那么你需要考虑到以下提到的当你的用户的设备进入“Doze”模式后的行为。

GCM推送的消息有两种优先级,分别是高优先级(high priority)和正常优先级(normal priority)。当消息是高优先级的时,GCM会尝试立刻久推送消息,对于处在“Doze”模式的设备来说,该设备将会理科被唤醒。高优先级的消息会立即唤醒app特性在android 6.0的系统中,和以前一样,并之前的android版本中的效果没有什么改变。

然而,如果使用正常优先级(默认的推送方式)推送的话,android 6.0处于“Doze”模式中的设备相比android 6.0之前的设备的行为将会于很大的不同。

  • 最重要的改变是GCM的消息会成批地被推送到处于“Doze”模式中的设备。当“Doze”中的设备每次进入一个idle maintenance window的时候,一批消息将会被推送到设备上。
  • 被推送的设备处于“Doze”模式中时,那些存活时间(TTL)为0的数据包将会被丢弃。

即便如此,除非你的消息对用户来说非常的重要、需要立即被用户接收到的话你可以使用高优先级的消息,否则我们还是推荐使用默认的优先级(normal priority),因为这样可以很大程度地减少设备电量的消耗。一旦用户的设备离开了“Doze”,正常优先级的消息就会马上被推送到设备上了,就上上面描述的那样。

高优先级的消息只应该用在哪些需要生成一个即时的通知给终端用户的app(如聊天app的即时消息)或者是手机来电的通知。

想了解更多关于GCM消息优先级的资料,进入Google Developers site

坚持原创技术分享,您的支持将鼓励我继续创作!