如果应用使用普通优先级GCM消息,它是否始终可以访问网络?

时间:2015-10-02 18:21:07

标签: android google-cloud-messaging google-play-services

有时,当我在Android应用中收到普通优先级GCM消息时,网络似乎无法使用。普通优先级GCM消息是否会自动向Android M的新Doze and App Standby睡眠条件授予应用临时豁免(即限制网络访问)?

完整背景: 我在Android-M发布之前实现了一个应用程序,该应用程序使用GCM消息传递来安装应用程序实例以按需下载更新。这是一次best practice轮询更新。

Android-M引入了Doze和AppStandby,当应用程序未使用new high-priority消息类型时,它似乎能够限制网络访问。

我应该将这些tickle消息切换为高优先级,还是在收到普通优先级消息时可以进行网络访问?我对Android M Previews的测试似乎表明网络有时不可用。

1 个答案:

答案 0 :(得分:1)

网络访问可能无法使用,您不应将消息类型切换为高优先级,以确保网络访问可用。如果GCM消息对该设备上的用户是迫切需要的,则只应切换消息类型。一般规则是,在考虑围绕creating notifications的指导时,通知将属于HIGH类别。如果您当前使用相同的GCM消息进行定期同步请求以及紧急消息,则应将它们分开。

关于“网络访问可能可用”的更多细节:

October 1st起,最新版本的Google Play服务将GCM正常优先级消息的传送与Doze的维护模式相关联,因此网络通常不会受到限制。提出这个问题的开发人员应该考虑一个强大的应用程序通常会同时处理Doze和实际网络连接问题。该应用通常会:

  • 在接收GCM消息时调用的回调中不执行网络工作。
  • 当应用程序收到GCM消息回调时,应用程序将使用GCMNetworkManager,JobScheduler或至少SyncAdapter安排工作。

网络调度例程:

  • 在Doze维护窗口中关联工作执行。
  • 允许其他粒度调度参数,以提供更好的用户体验,特别是在电池寿命方面(Wifi与移动电话,充电等)。
  • 获取唤醒锁以试图阻止设备在执行工作中途入睡。 Doze有时会忽略唤醒锁,例如在维护窗口的末尾。
  • 有适当的内置方式表明工作已完成并重新安排。
  • 使用指数退避重新安排工作,可能会在停电期间提供开发人员的服务器缓解,并在网络连接问题下为用户提供更好的电池续航时间。

注意:使用设备测试时,包括使用Android M预览的设备,请确保在测试之前Google Play服务是完全最新的(v8.1 +)。这通常需要打开Goog​​le Play商店应用并接受服务条款。