Я создаю приложение Android для управления розетками с помощью смартфона. Приложение имеет приложение Android Wear, чтобы люди могли контролировать свои огни прямо с запястья.Wear Actions выполняется очень медленно или совсем не работает, когда телефон находится в режиме доз
Когда пользователь хочет контролировать свет я отправить действие Строки через MessageApi
из SmartWatch на смартфон, который принимает это действие в WearableListenerService
и посылает соответствующий сигнал сети к электрической розетке/шлюзу в AsyncTask
.
Это работает нормально, пока телефон не был в режиме ожидания слишком долго. Однако, если телефон по-прежнему находится на столе слишком долго, а дремоты в действиях Wear выполняются очень медленно, а иногда и вовсе. Я предполагаю, что это частично связано с поведением, но в моем случае это нецелесообразно, так как пользователь не может ждать, пока его свет загорится, если он захочет войти в темную комнату.
Я знаю, что доза полностью сокращает сетевое взаимодействие для всего, кроме FCM/GCM, если вы не находитесь в белом списке доз. Но даже когда мое приложение включено в этот белый список, а сетевая часть работает, может потребоваться много времени для выполнения на телефоне.
Так что мой конкретный вопрос: Каков рекомендуемый способ справиться с этим сценарием, когда действие с переносимого устройства должно выполняться через сеть на подключенном смартфоне, находящемся в режиме доз?
Есть ли способ выйти из доза в течение короткого промежутка времени, чтобы быстрее выполнять вычисления, вызванные загружаемым приложением сопутствующего приложения?
Я знаю, что у AlarmManager
есть новый метод, который работает даже в режиме доз, но это также исправит задержку обработки? Увольнение тревоги после получения MessageEvent
от MessagApi
кажется обходным путем для меня.
Или, может быть, AsyncTask
- это неправильный способ обработки фоновой сети, и откуда происходит задержка?
Возникла ли сообщение API 'onMessageReceived', когда телефон находится в состоянии Doze? Или это то, что задерживается? – String
Теперь я изменил свой сетевой код, чтобы использовать IntentService для такого рода действий, и кажется, что он немного улучшил ситуацию. @String Да onMessageReceived немедленно срабатывает (почти). Я могу контролировать свои огни, когда в дозе. В моем коде я решаю между использованием WAN или LAN/WLAN, когда доступен интернет. Эта проверка (доступна в Интернете), кажется, занимает довольно много времени, и проверка не удалась, хотя мое приложение включено в белый список, и Интернет должен быть доступен. –