В настоящее время я разрабатываю приложение, которое позволяет пользователям отправлять данные датчиков на OSC receiver через UDP, ничего злонамеренного, пользователь полностью контролирует все.Отправка большого количества данных в фоновом режиме
Когда пользователь позволяет отправлять данные, каждое событие смены датчика вызывает отправку пакета, если пользователь разрешает этот датчик и ось для передачи.
Возможно, это приводит к большому количеству данных для отправки, например. если пользователь хочет контролировать синтезатор с большим количеством параметров со своего мобильного телефона (подумайте о барабанных звуках, вызванных прыжками, в то время как ваша ориентация в пространстве меняет тембр).
Я теперь протестировали следующие подходы, но каждый из них имеет свои минусы и/или аварии на разных версиях Android:
- Используйте
AsyncTask<String, Void, Boolean>
и отправить данные вdoInBackground(String... strings)
. Недостатком этого подхода является возможныйjava.util.concurrent.RejectedExecutionException
в Android 2.3.3, потому что это может создать слишком много потоков. - Использовать
IntentService
и отправить данныеonHandleIntent(Intent intent)
. Недостатком этого подхода является медленный и безответственный интерфейс в Android 2.3.3. - Используйте связанный
Service
и отправьте данные об открытой функции услуги. Это работает как шарм на Android 2.3.3, но падает на Android 4.4.4 сandroid.os.NetworkOnMainThreadException
.
Какие еще возможности? Будет ли работать AsyncTask<>
в связанном Service
не запускаться ни в одно из двух исключений?
Для этого я использовал пользовательский «HandlerThread» и пользовательский класс «Handler». Одно небольшое наблюдение: «убийство» батареи означает «истощение» в этом контексте, верно? – Residuum
Да. Частота передачи данных с использованием радиочастоты будет истощать много батареи. Так как полная зарядка может занять несколько часов, в зависимости от того, насколько большой аккумулятор имеет свое устройство. Если ваше приложение все равно будет работать, вам может потребоваться пакетная передача данных и отправка их каждые несколько минут. –
Слив в порядке в этом случае, но «убивающие» батареи могут иметь значение для уничтожения батареи. Сбор и отправка данных позже не является вариантом, так как приложение должно использоваться для прямого управления программными синтезаторами. – Residuum