Фоновая задача Android и жизненный цикл - PullRequest
1 голос
/ 12 января 2012

В настоящее время я работаю над приложением, которое подключается к устройству Bluetooth и получает сообщение каждые 0,25 секунды, а затем отображает эти данные на экране.Пользователь также сможет произвольно запускать / останавливать запись этих данных в файл на SD-карте.

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

Это работало нормально, но при изменениях конфигурации, таких как поворот экрана, когда действие уничтожается и воссоздается, поток BT дублируется, и я могубольше не общаюсь с ним.У меня нет проблем, если я остановлю поток BT в onStop () и перезапущу его в onResume (), но тогда мне нужно будет повторно подключиться к устройству BT, и если пользователь регистрирует данные, это будет прервано.

Как правильно выполнить эту функцию?Есть ли способ настроить мой поток, чтобы он не дублировался или чтобы я мог повторно подключиться к нему после изменения конфигурации?Стоит ли мне вместо этого искать сервис для моего BT-соединения и регистрации, а затем каким-то образом получать фид из сервиса для отображения в пользовательском интерфейсе?

Спасибо!

Ответы [ 2 ]

3 голосов
/ 12 января 2012

Должен ли я вместо этого посмотреть на службу для моего BT-соединения и регистрации, а затем каким-то образом получить канал от службы для отображения в интерфейсе пользователя?

Да, вы должны.Я думаю, что это хороший подход.Вы должны запустить свой поток данных журналов в сервисе и поместить данные, которые должны быть переданы в основной интерфейс или действие, в разделяемое предпочтение, которое даст ЛЮБОМУ активности доступ к информации.

Я думаю, что это будетбыть лучшим способом сделать это.

ИЛИ

Вы можете использовать метод, предоставленный alex.veprik

1 голос
/ 12 января 2012

Вы можете запретить повторное создание вашей активности при изменениях конфигурации.Просто измените файл манифеста:

<activity android:name=".MyActivity"
          android:configChanges="keyboard|keyboardHidden|orientation" />
...