【发布时间】:2016-08-30 01:12:15
【问题描述】:
我正在构建一个 Android 应用程序来使用智能手机控制电源插座。该应用具有 Android Wear 应用,因此人们可以直接通过手腕控制灯光。
当用户想要控制一盏灯时,我通过 MessageApi 从智能手表向智能手机发送一个字符串动作,智能手机在 WearableListenerService 中接收此动作并将适当的网络信号发送到电源插座/网关一个AsyncTask。
只要手机没有闲置太久,它就可以正常工作。但是,如果手机在桌面上停留的时间过长,并且在 Wear 中打瞌睡,动作确实执行得非常慢,有时甚至根本不执行。我想这部分是预期的行为,但在我的情况下这是不切实际的,因为如果用户想进入一个黑暗的房间,他不能等待他的灯打开。
我知道,如果您不在 doze 白名单中,doze 会完全切断除 FCM/GCM 之外的所有网络。但即使我的应用在此白名单中并且网络部分正常工作,操作也可能需要很长时间才能在手机上执行。
所以我的具体问题是: 处理这种情况的推荐方法是什么,需要通过网络在处于打盹模式的已连接智能手机上完成可穿戴设备的操作?
有没有办法快速退出打瞌睡,以便更快地执行由可穿戴伴侣应用触发的计算?
我知道AlarmManager 有一种新方法,即使在打瞌睡模式下也能正常工作,但这也能解决处理延迟问题吗?在收到来自MessagApi 的MessageEvent 后发出警报对我来说似乎是一种解决方法。
或者可能是 AsyncTask 只是处理后台网络的错误方式,这就是延迟的来源?
【问题讨论】:
-
当手机处于打盹状态时,Message API
onMessageReceived事件是否会立即触发?或者这就是延迟的原因? -
我现在更改了我的网络代码以使用 IntentService 来执行此类操作,看起来它对事情有所改善。 @String 是的 onMessageReceived 确实(几乎)立即触发。我可以在打瞌睡时控制灯光。在我的代码中,当互联网可用时,我决定使用 WAN 还是 LAN/WLAN。这项检查(互联网是否可用)似乎需要相当长的时间并且检查失败,即使我的应用在白名单中并且互联网应该可用。
标签: wear-os android-doze