2016-08-30 31 views
0

我正在構建一款Android應用程序,用於通過智能手機控制電源插座。該應用程序配備了Android Wear應用程序,用戶可以從手腕上直接控制燈光。當手機處於打盹模式時,佩戴動作執行非常緩慢或根本不執行

當用戶想要以控制光我發送經由MessageApi字符串作用從智能手錶到智能電話,它接收在一WearableListenerService這個動作和相應的網絡信號發送到電源插座/網關在AsyncTask

只要手機沒有閒置太久,這種方式就可以正常工作。但是,如果手機在桌面上停留時間過長,並且在Wear服務中打瞌睡,則執行速度非常緩慢,有時甚至根本不會。我想這是部分意圖的行爲,但在我的情況下,這是不實際的,因爲如果用戶想進入黑暗的房間,用戶無法等待很長一段時間才能打開燈。

我知道,如果您不在瞌睡白名單上,那麼瞌睡會徹底切斷除FCM/GCM之外的所有網絡。但是,即使我的應用程序位於此白名單上,並且網絡部分的工作操作可能需要很長時間才能在手機上執行。

所以我的具體問題是: 什麼是處理這種情況的推薦方式,可穿戴式設備的動作需要通過網絡在處於休眠模式的已連接智能手機上完成?

有沒有辦法退出打盹一段很短的時間,以更快地執行由可穿戴伴侶應用觸發的計算?

我知道AlarmManager有一種即使在睡眠模式下也可以工作的新方法,但是這是否也會修復處理延遲?從MessagApi收到MessageEvent後發出警報似乎是對我的一種解決方法。

或者也許是一個AsyncTask只是錯誤的方式來處理後臺網絡,那是延遲來自哪裏?

+0

馬上要做消息API'onMessageReceived'事件火當手機處於打盹?或者這是什麼延遲? – String

+0

現在我改變了我的網絡代碼,使用IntentService進行這種操作,似乎它改進了一些。 @String是的onMessageReceived不會立即觸發(幾乎)。瞌睡時我可以控制燈光。在我的代碼中,我決定在互聯網可用時使用WAN或LAN/WLAN。這個檢查(可用因特網)似乎需要相當長的一段時間,並且檢查失敗,即使我的應用程序在白名單上並且Internet應該可用。 –

回答

0

實際上,您可以使用幾個選項來處理打盹的效果,如Adapting your app to Doze中給出的。您可能需要考慮以下選項:

  1. 如果您的應用程序需要對網絡持續連接接收消息,如果可能的話,你應該使用谷歌雲消息傳遞(GCM)。

    GCM經過優化,可以通過高優先級的GCM消息與打盹和應用待機空閒模式一起工作。即使用戶的設備處於打盹狀態或應用程序處於App Standby模式,GCM高優先級消息也可讓您可靠地喚醒您的應用以訪問網絡。

  2. 爲了幫助安排警報,Android 6.0(API等級23)引入了兩個新的AlarmManager方法:setAndAllowWhileIdle()setExactAndAllowWhileIdle()。使用這些方法,即使設備處於打盹狀態,您也可以設置即將觸發的警報。

    但是,請注意,使用這些方法,setAndAllowWhileIdle()setExactAndAllowWhileIdle()都不能每9分鐘爲每個應用啓用一次以上的警報。

請嘗試通過Optimizing for Doze and App Standby瞭解更多詳細信息或討論。

除了這些給定的文檔,還分別獲得在處理打盹相同的選項,並在其中Diving into Doze Mode for Developers也可能有助於討論。

+0

我需要一臺服務器到互聯網(或至少LAN)連接,但不是我能控制的,從而GCM不是一個選項(如果我理解正確的話)。我知道新的警報方法,我已經使用它們。他們正常工作。你是否建議這是處理這個問題的正確方法?發射額外的警報? –