Мне нужен хороший способ получить данные из потока в другую деятельность

Я задавал различные формы этого вопроса раньше и получил разные мнения. В основном, мне посоветовали сделать некоторые чтения и эксперименты. Но безрезультатно. Я все еще не понимаю альтернативных решений, которые были предложены. Опять же, я разрабатываю приложение для Android, которое отображает данные Bluetooth.

У меня есть активность Bluetooth, которая, по-видимому, создает фоновый поток, который обновляет экран данными, которые он получает через соединение Bluetooth. Когда я запускаю другое/новое действие для построения данных, я вижу, что фоновый поток bluetooth продолжает записываться в Logcat. Итак, я знаю, что фоновый поток bluetooth по-прежнему работает, когда я запускаю свою активность Plot.

Моя цель - нарисовать данные bluetooth, которые постоянно предоставляются фоновым потоком Bluetooth. Я преуспел в следующем:, так как этот фоновый поток bluetooth все еще запущен, я решил использовать его метод update() для вызова статического метода Plot.plotData() для построения данных. И это работает, но я не понимаю, почему. Он будет работать бесконечно без проблем - приема и печати данных Bluetooth.

Но мне сообщили, что это, вероятно, не очень хорошее решение из-за возможного: безопасность потоков, утечка памяти, блокировка основной линии пользовательского интерфейса и т.д. Хотя я не сталкивался ни с одной из этих проблем, я неохотно заканчиваю мое решение является хорошим из-за обратной связи, которую я получил.

Было высказано предположение, что я пытаюсь использовать Service, AsyncTask и т.д. вместо вызова статического метода, моего Plot.plotData(), из метода обновления потока bluetooth. Но из исследования, которое я сделал, я не понимаю, как изменить свое решение на более подходящее.

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

Если вы хотите увидеть исходный код, я был бы рад опубликовать его.

2 ответа

Что бы я делал, это поставить данные BT (что у вас есть в потоке bkg) в службе Android, которая также управляет потоком bkg. Из этой службы вы можете широковещать обновления, хотя намерения, или позволить активности привязываться к этой службе. Таким образом, любая активность, которая знает, что слушать, может прослушивать ваши данные.

Взгляните на http://developer.android.com/guide/topics/fundamentals/services.html, чтобы получить представление об услугах. Вы можете погрузиться глубже, как только вы поймете основы.

Также читайте это: http://developer.android.com/resources/articles/multitasking-android-way.html

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


В android общие способы обмена данными между действиями (или в вашем случае - с потоком, запущенным в другой деятельности) -

  • База данных SQLite - вероятно, применима здесь
  • Сервис - также применимо
  • Намерения - не очень применимо
  • Поставщик контента - больше работы, чем базы данных и ограниченного дополнительного значения в этом случае
  • Файлы - возможно, не так хороши, как база данных
  • Общие настройки - не применимо

Похоже, вы ищете способ обмена данными в памяти, и это просто не так, как работает модель активности Android. Вы спрашиваете, есть ли проблемы с вашим подходом, и ответ определенно да.

Я предлагаю заглянуть в Service или Базы данных чтобы устранить эту проблему и избавиться от ваших статических методов.

licensed under cc by-sa 3.0 with attribution.