Android - как преодолеть 10-секундный лимит при приеме трансляций от IntentService? - PullRequest
0 голосов
/ 27 июня 2019

Хотелось бы знать, у меня есть Activity, которая получает широковещательные сообщения от IntentService, который должен сохранять данные и затем экспортировать их в файл CSV.Однако это может занять больше 10 секунд, и я знаю, что существуют определенные проблемы с запуском AsyncTasks и Threads с использованием BroadcastReceivers, которые могут быть убиты через 10 секунд.Я хотел бы знать, как бы я преодолел это?

РЕДАКТИРОВАТЬ: Обратите внимание, что я на самом деле делаю сохранение данных с датчиков, вычисление данных, а затем экспорт.Очевидно, что когда приложение находится в состоянии остановки при получении команды сохранения от другого приложения, приложение застревает в состоянии вычисления.При сохранении и экспорте используются AsyncTasks, но в расчете используется поток, в который я отправляю сообщение обратно в операцию с помощью обработчика.Кто-нибудь знает, как мне обойти это?Я использовал PendingResult в части сохранения, но теперь он застревает в части вычисления.

Ответы [ 3 ]

0 голосов
/ 28 июня 2019

Вот различные подходы для сохранения данных в фоновом режиме.

Фоновая обработка Android

Это действительно зависит от ваших требований. Если экспорт в csv может выдержать небольшую задержку, используйте WorkManager, так как он работает от батареи и автоматически использует лучший подход в зависимости от уровня API.

Используйте службу переднего плана, если вы хотите немедленное выполнение высокоприоритетного фона и вы также хотите уведомить пользователя, потому что службы переднего плана видны пользователям через недопустимое уведомление в области уведомлений. Например, загрузка вложений в WhatsApp.

Если это не очень продолжительная фоновая задача и вы не ожидаете, что пользователь закроет приложение во время этого, вы можете использовать любой подход фонового выполнения, такой как ASyncTask, Rxjava, kotlin Coroutines.

эволюция фонового исполнения . Очень интересная статья для чтения и сравнения этих разных подходов.

0 голосов
/ 03 июля 2019

Я нашел решение.Как и предполагалось, я использовал службу переднего плана, однако была проблема с моим обратным вызовом для моей активности в фоновом потоке, который был запущен службой, из-за того, что интерфейс обратного вызова был нулевым, когда приложение было приостановлено.Я смог это исправить.

Спасибо за вашу помощь.

0 голосов
/ 27 июня 2019

Пусть он запустит Сервис для выполнения работы, а не в самом Приемнике.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...