У меня длинный расчет, который принимает данные датчиков в качестве аргументов.Запрос фоновой задачи для запуска несколько раз в Android
После получения результата вычисления я хотел бы вызвать метод для обновления представления.
Этот расчет может занять некоторое время, поэтому я не могу запустить его внутри кода операции, поскольку получаю данные датчика, потому что поток пользовательского интерфейса замерзает или замедляется.
Поскольку я хочу запускать этот расчет каждый раз, когда получаю новые данные датчика, какие варианты меня предлагает Android?
Я пробовал использовать AsyncTask. Я бы запустил AsyncTask для запуска вычисления с использованием новых данных датчика, и метод обновления View получил бы вызов внутри его onPostExecute
.
К сожалению, этот подход вызвал проблемы с синхронизацией анимации: AsyncTask может завершиться после следующего, и обновление View будет вызвано с устаревшей информацией, что делает ее анимацию неустойчивой.
Я также пробовал использовать ту же AsyncTask с executeOnExecutor
, передав на него Single Thread Executor, но это не остановило дрожание анимации.
Наконец, я попытался запустить IntentService с обратным вызовом ResultReceiver внутри MainActivity. Хотя я могу запустить его, он работает только один раз. Я не понял, для чего предназначены IntentServices? Я не могу запустить его несколько раз (используя метод, который создает намерение с дополнительными параметрами и вызывает с ним startService
).
Резюме: У меня медленный метод, который работает с данными датчика. Я хочу запускать его в фоновом режиме каждый раз, когда я получаю новые данные датчика, и использую его результат/ответ для обновления представления.
Любые предложения?
использования Rx Java это работает так же, как и задача async, и работает лучше. –