Не могу заставить работать фоновый поток, если я не использую статические методы.Какие есть альтернативы? - PullRequest
0 голосов
/ 02 июня 2011

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

Из Logcat я точно знаю, что фоновая задача продолжает выполняться и генерирует BluetoothData даже после того, как я переключаю действие с Bluetooth Activity на Plotting.

Я нашел метод в фоновом потоке, который записывает BluetoothData в Logcat. Поэтому я решил использовать этот метод для передачи данных в метод plotData () действия Plotting Activity следующим образом:

    PlottingActivity plottingActivity = new PlottingActivity();
    plottingActivity.plotData(BluetoothData);

Но это не работает с вызовом plotData (), являющимся обычным методом экземпляра. Почему?

Это не работает, потому что при такой форме (возможно, ужасной) вызова plotData () метод onCreate () действия PlottingActivity не вызывается. Это приводит, по крайней мере, к исключению с нулевым указанием для метода redraw (), поэтому plot не перерисовывается и не отрисовывается.

Так вот почему это не работает. Но что заставляет это работать? Заинтересовались? Создание plotData () статическим методом. Работает отлично. Клипы прямо в режиме реального времени. Выглядит как осциллограф.

Но я получил отрицательный отзыв об этом решении (может, оно не безопасно для потоков или что-то в этом роде). Теперь я должен попросить альтернативные решения. [НЕ ОБСУЖДЕНИЕ]. Просто реальные, практичные, разумные альтернативы использованию фонового потока и метода экземпляра.

1 Ответ

2 голосов
/ 02 июня 2011

Вы не можете переносить данные из одного действия в другое, поскольку одновременно может быть активным только одно действие.Причина, по которой он работает со статическими членами, заключается в том, что определения классов существуют, но созданные объекты, на которые ссылалась операция, больше не существуют;они были собраны мусором, когда появилось новое действие.

Вам необходимо создать службу, которая остается активной независимо от того, какое действие активно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...