У меня есть приложение Android, которое обновляет изображения на основе декодированных команд GDL90, отправленных через UDP.Однако использование памяти и ЦП слишком велико для многих устройств, и даже на более качественных устройствах приложение зависнет примерно через 20 минут работы.
Сначала в AsyncTask получены UDP-пакеты.Они декодируются, и соответствующие сообщения отправляются обработчику в действии.Затем обработчик обновляет изображения, поворачивая одни и перемещая другие на величину, отправленную в сообщениях обработчика.
Одна из причин, по которой это неэффективно, заключается в том, что эти изображения обновляются независимо от того, изменились ли новые пакеты, т.е.если поворот был 23,4 раньше, а новый пакет был установлен на 23,4, обработчик все еще обновляет экран и использует память.Это обычное явление при отображении ответов в реальном времени по UDP или это просто неуклюжий дизайн?
На таких устройствах, как мой телефон, устройство Samsung более низкого уровня, использование памяти настолько велико, что большинство пакетов теряется.Другие устройства работают отлично, пока использование памяти не достигнет точки, при которой не будет получен ни один пакет.
Одно решение, которое я нашел, - обновлять Активность каждые x секунд с Намерением.Похоже, что это чаще запускает сборщик мусора и помогает более эффективно обрабатывать память.Однако мой начальник не считает это адекватным решением, поскольку оно приводит к отключению устройства от гнезда UDP и выглядит неуклюже.
Я также пытался использовать Glide для более эффективной обработки изображений, но это имело неблагоприятный эффект.
У кого-нибудь есть идеи о другом подходе, который я мог бы использовать?Буду признателен даже за общие мысли об управлении памятью.Есть ли прецедент для подобных приложений, которым приходится постоянно обновлять изображения из обработчика, когда в фоновом режиме подключен UDP-сокет?