我正在构建一个Android应用程序来控制电源插座与智能手机。该应用程序具有Android Wear应用程序,因此人们可以从手腕上控制他们的灯光。
当用户想要控制一盏灯时,我通过MessageApi将字符串动作从智能手表发送到智能手机,智能手机在WearableListenerService中接收该动作,并在AsyncTask中将适当的网络信号发送到电源插座/网关。
只要电话空闲的时间不太长,这就可以正常工作。然而,如果手机在桌面上停留的时间太长,Wear actions的执行速度会非常慢,有时根本不会执行。我猜这在某种程度上是故意的行为,但是在我的例子中这是不实际的,因为如果用户想要进入一个黑暗的房间,他就不能等那么长时间才打开灯。
我知道doze完全切断了除FCM/GCM之外的所有网络,如果你不在doze白名单上的话。但是,即使我的应用程序在此白名单上,并且网络部分正常工作,操作也可能需要很长时间才能在手机上执行。
因此,我的具体问题是:处理这种情况的推荐方式是什么?在这种情况下,来自可穿戴设备的操作需要通过网络在处于打瞌睡模式的连接智能手机上完成。
有没有办法在一段时间内快速退出doze,以便更快地执行可穿戴式伴侣应用程序触发的计算?
我知道AlarmManager有一个新的方法,即使在打瞌睡模式下也能工作,但这也能解决处理延迟吗?在我看来,在收到来自MessagApi的MessageEvent后触发警报似乎是一种解决办法。
或者也许AsyncTask只是错误的处理后台网络的方式,这就是延迟的来源?
发布于 2016-08-30 23:03:50
实际上,您可以使用一些选项来处理Adapting your app to Doze中给出的Doze效果。您可能需要考虑以下选项:
GCM通过高优先级GCM消息优化为可以在睡眠和应用待机模式下工作。 GCM高优先级消息可以让您可靠地唤醒您的应用访问网络,即使用户的设备处于睡眠模式或者应用处于应用待机模式。
AlarmManager方法:setAndAllowWhileIdle()和setExactAndAllowWhileIdle()。使用这些方法,您可以设置即使设备处于休眠状态也会触发的警报。但是,请注意,使用这些方法,setAndAllowWhileIdle()和setExactAndAllowWhileIdle()都不能在每个应用程序中每9分钟触发一次以上的警报。
请尝试通过Optimizing for Doze and App Standby获取更详细的信息或讨论。
除了这些给定的文档之外,在Diving into Doze Mode for Developers中也给出并讨论了处理Doze的相同选项,这也可能会有所帮助。
https://stackoverflow.com/questions/39217401
复制相似问题