Я хочу разработать приложение для Android, удовлетворяющее следующим требованиям:
- Записывайте данные с датчика (например, акселерометра) примерно с частотой 10–30 Гц.
- Загрузите эти необработанные данные на удаленный сервер (например, с помощью сокетов TCP).
- Пользовательский интерфейс должен быть минимальным, всего пара кнопок для запуска или остановки записи и передачи данных.
- Весь процесс должен быть незаметен для пользователя и продолжать работать даже при выключенном экране на несколько часов.
- Время автономной работы не критично (должно хватить на несколько часов).
Видение: хотелось бы в квазиреальном времени анализировать показания датчиков группы пользователей без их вмешательства (кроме запуска приложения).
После некоторых исследований мне удалось выполнить эти задачи по отдельности и неэффективно. Я пробовал такие классы, как Service и IntentService, SensorEventListener и т. д. Я не знаю, следует ли мне использовать Thread, Service или IntentService для каждой задачи. Конкретно у меня серьезные проблемы с их общением.
Мои вопросы:
- Какие классы вы рекомендуете использовать для решения этой проблемы?
- Какое задание нужно выполнить на каждом из них?
- Если задачи выполняются в разных сущностях (потоках, сервисах, интентсервисах и т.д.), как мне их взаимодействовать (я думаю о задачах записи и выгрузки)?
Я прошу структуру наилучшей практики для решения моей проблемы. Вам не нужно вдаваться в подробности с точки зрения разработки/кодирования решения.
Большое спасибо и не стесняйтесь спрашивать, если что-то не ясно.
Дэйвид
ОБНОВИТЬ:
После дополнительных исследований и благодаря DROIDcoder мне удалось разработать скелет для моего приложения:
- Основной пользовательский интерфейс: объект Activity с двумя кнопками (пуск/стоп), которые запускают службу с помощью обычных методов startService/stopService.
- Background: Service object
- Awake when screen goes off: the service requests a power lock in onCreate() and releases the power lock in onDestroy(). Find more info here: https://developer.android.com/training/scheduling/wakelock.html#cpu
- Значения датчика журнала: внедрите SensorEventListener в службу, как обычно.
- Загрузите значения датчика на сервер: используйте AsyncTask в службе, как описано здесь: Как использовать AsyncTask< /а>
- Форматирование и передача данных: используйте библиотеку GSON + HttpClient, как описано здесь: Как отправить POST-запрос в формате JSON с помощью HTTPClient?
- Тестирование: используйте веб-сайт http://www.jsontest.com/ для тестирования запросов JSON.
Поскольку это только предложение, я добавляю его как редакцию. Я опубликую подробный ответ, когда вся система заработает.
Остаются вопросы: можете ли вы подумать о лучшем дизайне приложения?
Спасибо еще раз!