0

我正在构建一个 Android 应用程序来用智能手机控制电源插座。该应用程序具有 Android Wear 应用程序,因此人们可以直接从手腕上控制灯光。

当用户想要控制一盏灯时,我通过MessageApi智能手表向智能手机发送一个字符串动作,智能手机在 a 中接收此动作,WearableListenerService并将适当的网络信号发送到 a 中的电源插座/网关AsyncTask

只要手机没有闲置太久,它就可以正常工作。但是,如果手机在桌面上停留的时间过长,并且在 Wear 中打瞌睡,动作执行的速度会非常慢,有时甚至根本不会执行。我想这部分是预期的行为,但在我的情况下这是不切实际的,因为如果用户想进入一个黑暗的房间,他不能等待他的灯打开。

我知道如果您不在打瞌睡白名单上,打瞌睡会完全切断除 FCM/GCM 之外的所有网络。但即使我的应用程序在此白名单中并且网络部分正常工作,操作也可能需要很长时间才能在手机上执行。

所以我的具体问题是:处理这种情况的推荐方法是什么,需要通过网络在处于打盹模式的连接智能手机上完成可穿戴设备的操作?

有没有办法快速退出打瞌睡以更快地执行由可穿戴伴侣应用程序触发的计算?

我知道AlarmManager有一种新方法,即使在打瞌睡模式下也能工作,但这也能解决处理延迟问题吗?收到邮件后发出警报MessageEventMessagApi我来说似乎是一种解决方法。

或者也许是AsyncTask处理后台网络的错误方法,而这就是延迟的来源?

4

1 回答 1

0

实际上,您可以通过一些选项来处理打瞌睡的效果,如Adapting your app to Doze中所述。您可能需要考虑以下选项:

  1. 如果您的应用需要持久连接到网络以接收消息,则应尽可能使用 Google Cloud Messaging (GCM)。

    通过高优先级 GCM 消息,GCM 已针对 Doze 和 App Standby 空闲模式进行了优化。GCM 高优先级消息让您可以可靠地唤醒您的应用程序以访问网络,即使用户的设备处于打盹或应用程序处于应用程序待机模式。

  2. 为了帮助安排闹钟,Android 6.0(API 级别 23)引入了两种新AlarmManager方法:setAndAllowWhileIdle()setExactAndAllowWhileIdle(). 使用这些方法,您可以设置即使设备处于打瞌睡状态也会触发的警报。

    但是,请注意,使用这些方法,每个应用每 9 分钟发出一次警报也setAndAllowWhileIdle()不会setExactAndAllowWhileIdle()超过一次。

请尝试通过Optimizing for Doze 和 App Standby了解更详细的信息或讨论。

除了这些给定的文档之外,在为开发人员进入打盹模式中也给出和讨论了处理打盹的相同选项,这也可能有所帮助。

于 2016-08-30T15:03:49.587 回答